Merge pull request #1154 from WebAssembly/fuzz

Fuzz fixes
diff --git a/src/passes/Inlining.cpp b/src/passes/Inlining.cpp
index 710fc00..192480d 100644
--- a/src/passes/Inlining.cpp
+++ b/src/passes/Inlining.cpp
@@ -155,7 +155,6 @@
   auto* call = (*action.callSite)->cast<Call>();
   Builder builder(*module);
   auto* block = Builder(*module).makeBlock();
-  block->type = call->type;
   block->name = Name(std::string("__inlined_func$") + from->name.str);
   *action.callSite = block;
   // set up a locals mapping
@@ -191,6 +190,16 @@
   auto* contents = ExpressionManipulator::copy(from->body, *module);
   updater.walk(contents);
   block->list.push_back(contents);
+  block->type = call->type;
+  // if the function returned a value, we just set the block containing the
+  // inlined code to have that type. or, if the function was void and
+  // contained void, that is fine too. a bad case is a void function in which
+  // we have unreachable code, so we would be replacing a void call with an
+  // unreachable; we need to handle
+  if (contents->type == unreachable && block->type == none) {
+    // make the block reachable by adding a break to it
+    block->list.push_back(builder.makeBreak(block->name));
+  }
   return block;
 }
 
diff --git a/src/passes/RemoveUnusedBrs.cpp b/src/passes/RemoveUnusedBrs.cpp
index e627ce1..e307ec4 100644
--- a/src/passes/RemoveUnusedBrs.cpp
+++ b/src/passes/RemoveUnusedBrs.cpp
@@ -482,9 +482,11 @@
             // a "selectified" condition that executes both.
             for (Index i = 0; i < list.size() - 1; i++) {
               auto* br1 = list[i]->dynCast<Break>();
-              if (!br1 || !br1->condition) continue;
+              // 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<Break>();
-              if (!br2 || !br2->condition) continue;
+              if (!br2 || !br2->condition || br2->type == unreachable) continue;
               if (br1->name == br2->name) {
                 assert(!br1->value && !br2->value);
                 if (!EffectAnalyzer(passOptions, br2->condition).hasSideEffects()) {
diff --git a/src/tools/translate-to-fuzz.h b/src/tools/translate-to-fuzz.h
index 307604a..74a4570 100644
--- a/src/tools/translate-to-fuzz.h
+++ b/src/tools/translate-to-fuzz.h
@@ -259,16 +259,16 @@
     labelIndex = 0;
     assert(breakableStack.empty());
     assert(hangStack.empty());
+    // with small chance, make the body unreachable
+    auto bodyType = func->result;
+    if (oneIn(10)) {
+      bodyType = unreachable;
+    }
     // with reasonable chance make the body a block
     if (oneIn(2)) {
-      func->body = makeBlock(func->result);
+      func->body = makeBlock(bodyType);
     } else {
-      // with very small chance, make the body unreachable
-      if (oneIn(20)) {
-        func->body = make(unreachable);
-      } else {
-        func->body = make(func->result);
-      }
+      func->body = make(bodyType);
     }
     if (HANG_LIMIT > 0) {
       func->body = builder.makeSequence(
diff --git a/test/passes/inlining-optimizing.txt b/test/passes/inlining-optimizing.txt
index e1f81e5..19c5800 100644
--- a/test/passes/inlining-optimizing.txt
+++ b/test/passes/inlining-optimizing.txt
@@ -33,3 +33,11 @@
   (nop)
  )
 )
+(module
+ (type $0 (func (result i32)))
+ (type $1 (func))
+ (memory $0 0)
+ (func $main (type $0) (result i32)
+  (unreachable)
+ )
+)
diff --git a/test/passes/inlining-optimizing.wast b/test/passes/inlining-optimizing.wast
index 082c4e9..4f4f348 100644
--- a/test/passes/inlining-optimizing.wast
+++ b/test/passes/inlining-optimizing.wast
@@ -76,4 +76,13 @@
     (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
+ )
+)
 
diff --git a/test/passes/remove-unused-brs_shrink-level=1.txt b/test/passes/remove-unused-brs_shrink-level=1.txt
index a26f4eb..fb73935 100644
--- a/test/passes/remove-unused-brs_shrink-level=1.txt
+++ b/test/passes/remove-unused-brs_shrink-level=1.txt
@@ -139,4 +139,24 @@
    )
   )
  )
+ (func $br-if-unreachable-pair (type $1)
+  (block $label$14
+   (br_if $label$14
+    (unreachable)
+   )
+   (br_if $label$14
+    (i32.const 0)
+   )
+  )
+ )
+ (func $br-if-unreachable-pair2 (type $1)
+  (block $label$14
+   (br_if $label$14
+    (i32.const 0)
+   )
+   (br_if $label$14
+    (unreachable)
+   )
+  )
+ )
 )
diff --git a/test/passes/remove-unused-brs_shrink-level=1.wast b/test/passes/remove-unused-brs_shrink-level=1.wast
index 88977be..11510de 100644
--- a/test/passes/remove-unused-brs_shrink-level=1.wast
+++ b/test/passes/remove-unused-brs_shrink-level=1.wast
@@ -93,5 +93,25 @@
     )
    )
   )
+  (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/test/passes/translate-to-fuzz.txt b/test/passes/translate-to-fuzz.txt
index b426766..b966a41 100644
--- a/test/passes/translate-to-fuzz.txt
+++ b/test/passes/translate-to-fuzz.txt
@@ -2,11 +2,7 @@
  (global $hangLimit (mut i32) (i32.const 100))
  (memory $0 1 1)
  (export "func_0" (func $func_0))
- (export "func_2" (func $func_2))
- (export "func_4" (func $func_4))
- (export "func_5" (func $func_5))
- (export "func_7" (func $func_7))
- (export "func_8" (func $func_8))
+ (export "func_6" (func $func_6))
  (export "hangLimitInitializer" (func $hangLimitInitializer))
  (func $func_0 (result i32)
   (local $0 f32)
@@ -18,7 +14,7 @@
      (get_global $hangLimit)
     )
     (return
-     (i32.const -5)
+     (i32.const -11)
     )
    )
    (set_global $hangLimit
@@ -28,840 +24,143 @@
     )
    )
   )
-  (block $label$0 (result i32)
-   (if
-    (loop $label$1 (result i32)
-     (block
-      (if
-       (i32.eqz
-        (get_global $hangLimit)
+  (loop $label$0
+   (block
+    (if
+     (i32.eqz
+      (get_global $hangLimit)
+     )
+     (return
+      (i32.const 26963)
+     )
+    )
+    (set_global $hangLimit
+     (i32.sub
+      (get_global $hangLimit)
+      (i32.const 1)
+     )
+    )
+   )
+   (i64.trunc_u/f64
+    (drop
+     (loop $label$3
+      (block
+       (if
+        (i32.eqz
+         (get_global $hangLimit)
+        )
+        (return
+         (i32.const 32767)
+        )
        )
-       (return
-        (i32.const -37)
+       (set_global $hangLimit
+        (i32.sub
+         (get_global $hangLimit)
+         (i32.const 1)
+        )
        )
       )
-      (set_global $hangLimit
-       (i32.sub
-        (get_global $hangLimit)
-        (i32.const 1)
-       )
+      (return
+       (i32.const -73)
       )
      )
+    )
+   )
+  )
+ )
+ (func $func_1 (result f64)
+  (local $0 i32)
+  (local $1 f64)
+  (block
+   (if
+    (i32.eqz
+     (get_global $hangLimit)
+    )
+    (return
+     (f64.const 9223372036854775808)
+    )
+   )
+   (set_global $hangLimit
+    (i32.sub
+     (get_global $hangLimit)
+     (i32.const 1)
+    )
+   )
+  )
+  (block $label$0 (result f64)
+   (drop
+    (if (result i64)
      (select
-      (loop $label$10 (result i32)
-       (block
-        (if
-         (i32.eqz
-          (get_global $hangLimit)
-         )
-         (return
-          (i32.const 32767)
-         )
-        )
-        (set_global $hangLimit
-         (i32.sub
-          (get_global $hangLimit)
-          (i32.const 1)
-         )
-        )
-       )
-       (block $label$11 (result i32)
-        (i32.const 24342)
-       )
-      )
-      (i32.load8_s offset=2
-       (i32.and
-        (br_if $label$0
-         (i32.trunc_s/f64
-          (loop $label$14 (result f64)
-           (block
-            (if
-             (i32.eqz
-              (get_global $hangLimit)
-             )
-             (return
-              (i32.const 0)
-             )
-            )
-            (set_global $hangLimit
-             (i32.sub
-              (get_global $hangLimit)
-              (i32.const 1)
-             )
-            )
-           )
-           (block $label$15 (result f64)
-            (br $label$1)
-           )
-          )
-         )
-         (i32.eqz
-          (i32.trunc_u/f64
-           (loop $label$12 (result f64)
-            (block
-             (if
-              (i32.eqz
-               (get_global $hangLimit)
-              )
-              (return
-               (i32.const -128)
-              )
-             )
-             (set_global $hangLimit
-              (i32.sub
-               (get_global $hangLimit)
-               (i32.const 1)
-              )
-             )
-            )
-            (block $label$13 (result f64)
-             (return
-              (i32.const -10)
-             )
-            )
-           )
-          )
-         )
-        )
-        (i32.const 31)
-       )
-      )
-      (br_if $label$0
-       (loop $label$2 (result i32)
-        (block
-         (if
-          (i32.eqz
-           (get_global $hangLimit)
-          )
-          (return
-           (i32.const 1)
-          )
-         )
-         (set_global $hangLimit
-          (i32.sub
-           (get_global $hangLimit)
-           (i32.const 1)
-          )
-         )
-        )
-        (block $label$3 (result i32)
-         (i32.popcnt
-          (select
-           (if (result i32)
-            (i32.eqz
-             (if (result i32)
-              (i32.eqz
-               (i32.const -1)
-              )
-              (i32.const 0)
-              (i32.const 0)
-             )
-            )
-            (block $label$5 (result i32)
-             (loop $label$6 (result i32)
-              (block
-               (if
-                (i32.eqz
-                 (get_global $hangLimit)
-                )
-                (return
-                 (i32.const -41)
-                )
-               )
-               (set_global $hangLimit
-                (i32.sub
-                 (get_global $hangLimit)
-                 (i32.const 1)
-                )
-               )
-              )
-              (i64.lt_s
-               (i64.const 1100)
-               (if (result i64)
-                (i32.eqz
-                 (i32.const -88)
-                )
-                (get_local $1)
-                (get_local $1)
-               )
-              )
-             )
-            )
-            (block $label$7 (result i32)
-             (br $label$1)
-            )
-           )
-           (select
-            (br_if $label$3
-             (i32.const 65535)
-             (loop $label$8 (result i32)
-              (block
-               (if
-                (i32.eqz
-                 (get_global $hangLimit)
-                )
-                (return
-                 (i32.const 10)
-                )
-               )
-               (set_global $hangLimit
-                (i32.sub
-                 (get_global $hangLimit)
-                 (i32.const 1)
-                )
-               )
-              )
-              (block $label$9 (result i32)
-               (i32.const 127)
-              )
-             )
-            )
-            (i32.const 67372036)
-            (i32.const -72)
-           )
-           (br_if $label$3
-            (block $label$4 (result i32)
-             (br $label$2)
-            )
-            (i32.const -2147483648)
-           )
-          )
-         )
-        )
-       )
-       (i32.eqz
-        (i32.const -1)
-       )
-      )
-     )
-    )
-    (block $label$16
-     (br_if $label$16
-      (i32.eqz
-       (block $label$17 (result i32)
-        (br $label$16)
-       )
-      )
-     )
-     (f32.store offset=3
-      (i32.const 5661)
-      (call $deNan32
-       (select
-        (if (result f32)
-         (i32.eqz
-          (i32.const 23)
-         )
-         (block $label$23 (result f32)
-          (if (result f32)
-           (i32.eqz
-            (i32.const 3330)
-           )
-           (block $label$24 (result f32)
-            (br $label$16)
-           )
-           (f32.load offset=22
-            (block $label$25 (result i32)
-             (i32.const -1)
-            )
-           )
-          )
-         )
-         (f32.load offset=1 align=1
-          (i32.and
-           (if (result i32)
-            (i32.trunc_u/f32
-             (call $deNan32
-              (select
-               (loop $label$27 (result f32)
-                (block
-                 (if
-                  (i32.eqz
-                   (get_global $hangLimit)
-                  )
-                  (return
-                   (i32.const -31)
-                  )
-                 )
-                 (set_global $hangLimit
-                  (i32.sub
-                   (get_global $hangLimit)
-                   (i32.const 1)
-                  )
-                 )
-                )
-                (get_local $0)
-               )
-               (block $label$28 (result f32)
-                (br $label$16)
-               )
-               (loop $label$26 (result i32)
-                (block
-                 (if
-                  (i32.eqz
-                   (get_global $hangLimit)
-                  )
-                  (return
-                   (i32.const 65518)
-                  )
-                 )
-                 (set_global $hangLimit
-                  (i32.sub
-                   (get_global $hangLimit)
-                   (i32.const 1)
-                  )
-                 )
-                )
-                (if (result i32)
-                 (i32.const 1)
-                 (i32.const -32768)
-                 (i32.const 1392974931)
-                )
-               )
-              )
-             )
-            )
-            (call $func_0)
-            (i32.trunc_s/f32
-             (tee_local $2
-              (f32.const 9223372036854775808)
-             )
-            )
-           )
-           (i32.const 31)
-          )
-         )
-        )
-        (f32.load offset=4
-         (i32.and
-          (br_if $label$0
-           (i32.load8_u offset=3
-            (i32.and
-             (loop $label$36 (result i32)
-              (block
-               (if
-                (i32.eqz
-                 (get_global $hangLimit)
-                )
-                (return
-                 (i32.const -128)
-                )
-               )
-               (set_global $hangLimit
-                (i32.sub
-                 (get_global $hangLimit)
-                 (i32.const 1)
-                )
-               )
-              )
-              (block $label$37 (result i32)
-               (br $label$16)
-              )
-             )
-             (i32.const 31)
-            )
-           )
-           (i32.eqz
-            (block $label$29 (result i32)
-             (if (result i32)
-              (i32.const 0)
-              (block $label$30 (result i32)
-               (if (result i32)
-                (i32.eqz
-                 (select
-                  (f32.lt
-                   (get_local $2)
-                   (get_local $2)
-                  )
-                  (select
-                   (select
-                    (i32.const -101)
-                    (i32.const 52)
-                    (i32.const 2147483647)
-                   )
-                   (i32.const 6733)
-                   (i32.const -12)
-                  )
-                  (i32.load8_s offset=22
-                   (i32.and
-                    (i32.const 976638003)
-                    (i32.const 31)
-                   )
-                  )
-                 )
-                )
-                (block $label$31 (result i32)
-                 (br $label$16)
-                )
-                (block $label$32 (result i32)
-                 (br $label$16)
-                )
-               )
-              )
-              (block $label$33 (result i32)
-               (f64.store offset=2
-                (i32.and
-                 (loop $label$34 (result i32)
-                  (block
-                   (if
-                    (i32.eqz
-                     (get_global $hangLimit)
-                    )
-                    (return
-                     (i32.const -2147483648)
-                    )
-                   )
-                   (set_global $hangLimit
-                    (i32.sub
-                     (get_global $hangLimit)
-                     (i32.const 1)
-                    )
-                   )
-                  )
-                  (block $label$35 (result i32)
-                   (i32.trunc_u/f32
-                    (get_local $2)
-                   )
-                  )
-                 )
-                 (i32.const 31)
-                )
-                (f64.const 6409)
-               )
-               (br $label$16)
-              )
-             )
-            )
-           )
-          )
-          (i32.const 31)
-         )
-        )
-        (if (result i32)
-         (i32.const 2147483647)
-         (block $label$18 (result i32)
-          (f32.store offset=1
-           (i32.and
-            (br_if $label$18
-             (i32.load8_s offset=22
-              (i32.and
-               (br_if $label$0
-                (block $label$19 (result i32)
-                 (return
-                  (i32.const 201)
-                 )
-                )
-                (i32.const 1465323825)
-               )
-               (i32.const 31)
-              )
-             )
-             (i32.load8_u offset=4
-              (i32.and
-               (br_if $label$0
-                (i32.load16_s offset=3
-                 (i32.and
-                  (f32.gt
-                   (get_local $0)
-                   (f32.load offset=2 align=1
-                    (i32.and
-                     (i32.const 65453)
-                     (i32.const 31)
-                    )
-                   )
-                  )
-                  (i32.const 31)
-                 )
-                )
-                (i32.const 2147483647)
-               )
-               (i32.const 31)
-              )
-             )
-            )
-            (i32.const 31)
-           )
-           (block $label$20 (result f32)
-            (call $deNan32
-             (f32.convert_u/i64
-              (i64.trunc_u/f32
-               (call $deNan32
-                (f32.min
-                 (tee_local $0
-                  (f32.const 2.8411366687849113e-29)
-                 )
-                 (block $label$21 (result f32)
-                  (br $label$16)
-                 )
-                )
-               )
-              )
-             )
-            )
-           )
-          )
-          (br $label$16)
-         )
-         (block $label$22 (result i32)
-          (i32.const -44)
-         )
-        )
-       )
-      )
-     )
-    )
-    (block $label$38
-     (if
-      (i32.eqz
-       (i32.const 73)
-      )
-      (block $label$39
-       (loop $label$40
-        (block
-         (if
-          (i32.eqz
-           (get_global $hangLimit)
-          )
-          (return
-           (i32.const 2147483647)
-          )
-         )
-         (set_global $hangLimit
-          (i32.sub
-           (get_global $hangLimit)
-           (i32.const 1)
-          )
-         )
-        )
-        (nop)
-       )
-      )
-      (block $label$41
-       (loop $label$42
-        (block
-         (if
-          (i32.eqz
-           (get_global $hangLimit)
-          )
-          (return
-           (i32.const 167857947)
-          )
-         )
-         (set_global $hangLimit
-          (i32.sub
-           (get_global $hangLimit)
-           (i32.const 1)
-          )
-         )
-        )
-        (block $label$43
-         (if
-          (block $label$44 (result i32)
-           (if
-            (select
-             (i32.const 68027396)
-             (call $func_0)
-             (i32.const 127)
-            )
-            (loop $label$45
-             (block
-              (if
-               (i32.eqz
-                (get_global $hangLimit)
-               )
-               (return
-                (i32.const 2147483647)
-               )
-              )
-              (set_global $hangLimit
-               (i32.sub
-                (get_global $hangLimit)
-                (i32.const 1)
-               )
-              )
-             )
-             (set_local $2
-              (if (result f32)
-               (i32.eqz
-                (i32.const 0)
-               )
-               (block $label$46 (result f32)
-                (br $label$43)
-               )
-               (f32.const 70)
-              )
-             )
-            )
-            (block $label$47
-             (nop)
-            )
-           )
-           (loop $label$48 (result i32)
-            (block
-             (if
-              (i32.eqz
-               (get_global $hangLimit)
-              )
-              (return
-               (i32.const 218628885)
-              )
-             )
-             (set_global $hangLimit
-              (i32.sub
-               (get_global $hangLimit)
-               (i32.const 1)
-              )
-             )
-            )
-            (i32.const 134561796)
-           )
-          )
-          (block $label$49
-           (loop $label$50
-            (block
-             (if
-              (i32.eqz
-               (get_global $hangLimit)
-              )
-              (return
-               (i32.const -73)
-              )
-             )
-             (set_global $hangLimit
-              (i32.sub
-               (get_global $hangLimit)
-               (i32.const 1)
-              )
-             )
-            )
-            (f32.store offset=1
-             (i32.and
-              (if (result i32)
-               (i32.eqz
-                (i32.const -1)
-               )
-               (f64.gt
-                (f64.const 2.314826290848667e-289)
-                (f64.const 2.5152972121526945e-172)
-               )
-               (i32.const -71)
-              )
-              (i32.const 31)
-             )
-             (call $deNan32
-              (f32.convert_u/i32
-               (i32.const -32)
-              )
-             )
-            )
-           )
-          )
-          (block $label$51
-           (nop)
-          )
-         )
-        )
-       )
-      )
-     )
-    )
-   )
-   (block $label$52
-    (f64.store offset=4 align=4
-     (i32.and
-      (block $label$53 (result i32)
-       (return
-        (i32.const -11)
-       )
-      )
-      (i32.const 31)
-     )
-     (f64.const 3402823466385288598117041e14)
-    )
-   )
-   (return
-    (i32.const 22064)
-   )
-  )
- )
- (func $func_1 (result f32)
-  (block
-   (if
-    (i32.eqz
-     (get_global $hangLimit)
-    )
-    (return
-     (f32.const -nan:0x7fffd7)
-    )
-   )
-   (set_global $hangLimit
-    (i32.sub
-     (get_global $hangLimit)
-     (i32.const 1)
-    )
-   )
-  )
-  (block $label$0 (result f32)
-   (nop)
-   (return
-    (f32.const -nan:0x7fffcc)
-   )
-  )
- )
- (func $func_2 (result i64)
-  (local $0 f64)
-  (local $1 f32)
-  (block
-   (if
-    (i32.eqz
-     (get_global $hangLimit)
-    )
-    (return
-     (i64.const 65535)
-    )
-   )
-   (set_global $hangLimit
-    (i32.sub
-     (get_global $hangLimit)
-     (i32.const 1)
-    )
-   )
-  )
-  (i64.const -75)
- )
- (func $func_3 (result f32)
-  (block
-   (if
-    (i32.eqz
-     (get_global $hangLimit)
-    )
-    (return
-     (f32.const 0)
-    )
-   )
-   (set_global $hangLimit
-    (i32.sub
-     (get_global $hangLimit)
-     (i32.const 1)
-    )
-   )
-  )
-  (block $label$0 (result f32)
-   (if (result f32)
-    (i32.eqz
-     (call $func_0)
-    )
-    (block $label$1 (result f32)
-     (nop)
-     (call $deNan32
+      (get_local $0)
+      (i32.const 84414006)
       (select
-       (f32.load offset=22 align=1
-        (i32.and
-         (i32.wrap/i64
-          (loop $label$2 (result i64)
-           (block
-            (if
-             (i32.eqz
-              (get_global $hangLimit)
-             )
-             (return
-              (f32.const -88)
-             )
-            )
-            (set_global $hangLimit
-             (i32.sub
-              (get_global $hangLimit)
-              (i32.const 1)
-             )
-            )
-           )
-           (block $label$3 (result i64)
-            (select
-             (block $label$5 (result i64)
-              (return
-               (f32.const 65479)
-              )
-             )
-             (if (result i64)
-              (i32.const 0)
-              (block $label$6 (result i64)
-               (br $label$2)
-              )
-              (block $label$7 (result i64)
-               (return
-                (f32.const -109)
-               )
-              )
-             )
-             (block $label$4 (result i32)
-              (return
-               (f32.const 1.9142481055608796e-22)
-              )
-             )
-            )
-           )
+       (i32.const 32767)
+       (i32.const -1)
+       (loop $label$1 (result i32)
+        (block
+         (if
+          (i32.eqz
+           (get_global $hangLimit)
+          )
+          (return
+           (get_local $1)
           )
          )
-         (i32.const 31)
+         (set_global $hangLimit
+          (i32.sub
+           (get_global $hangLimit)
+           (i32.const 1)
+          )
+         )
+        )
+        (block $label$2 (result i32)
+         (return
+          (get_local $1)
+         )
         )
        )
-       (call $deNan32
-        (f32.demote/f64
-         (call $deNan64
-          (f64.add
-           (f64.const -nan:0xfffffffffffe6)
-           (call $deNan64
-            (select
-             (f64.const 6.146610220788184e-183)
-             (loop $label$18 (result f64)
-              (block
-               (if
-                (i32.eqz
-                 (get_global $hangLimit)
-                )
-                (return
-                 (f32.const -93)
-                )
-               )
-               (set_global $hangLimit
-                (i32.sub
-                 (get_global $hangLimit)
-                 (i32.const 1)
-                )
-               )
-              )
-              (block $label$19 (result f64)
-               (call $deNan64
-                (f64.nearest
-                 (call $deNan64
-                  (f64.convert_u/i32
-                   (i32.const -45)
-                  )
-                 )
-                )
-               )
-              )
-             )
-             (block $label$10 (result i32)
-              (br_if $label$10
-               (if (result i32)
+      )
+     )
+     (if (result i64)
+      (i32.eqz
+       (loop $label$9 (result i32)
+        (block
+         (if
+          (i32.eqz
+           (get_global $hangLimit)
+          )
+          (return
+           (f64.const 19)
+          )
+         )
+         (set_global $hangLimit
+          (i32.sub
+           (get_global $hangLimit)
+           (i32.const 1)
+          )
+         )
+        )
+        (block $label$10 (result i32)
+         (i32.load8_s offset=3
+          (i32.and
+           (tee_local $0
+            (tee_local $0
+             (select
+              (i32.load16_u offset=4 align=1
+               (i32.and
                 (select
-                 (call $func_0)
-                 (i32.trunc_s/f64
-                  (f64.const -nan:0xfffffffffffdd)
-                 )
-                 (if (result i32)
-                  (i32.eqz
-                   (i32.const 2113936401)
-                  )
-                  (select
-                   (loop $label$15 (result i32)
+                 (get_local $0)
+                 (get_local $0)
+                 (select
+                  (i64.lt_s
+                   (loop $label$12 (result i64)
                     (block
                      (if
                       (i32.eqz
                        (get_global $hangLimit)
                       )
                       (return
-                       (f32.const -nan:0x7fffea)
+                       (get_local $1)
                       )
                      )
                      (set_global $hangLimit
@@ -871,34 +170,337 @@
                       )
                      )
                     )
-                    (i32.const -90)
+                    (i64.const 32767)
                    )
-                   (i32.const 2097561141)
-                   (i32.const 127)
+                   (i64.const 251)
                   )
-                  (i32.const 5918)
+                  (i32.trunc_u/f64
+                   (get_local $1)
+                  )
+                  (br_if $label$10
+                   (i32.load16_u offset=3
+                    (i32.and
+                     (i32.const 20)
+                     (i32.const 31)
+                    )
+                   )
+                   (get_local $0)
+                  )
                  )
                 )
-                (block $label$16 (result i32)
+                (i32.const 31)
+               )
+              )
+              (loop $label$13 (result i32)
+               (block
+                (if
+                 (i32.eqz
+                  (get_global $hangLimit)
+                 )
                  (return
-                  (f32.const 18446744073709551615)
+                  (get_local $1)
                  )
                 )
-                (block $label$17 (result i32)
-                 (return
-                  (f32.const 253)
+                (set_global $hangLimit
+                 (i32.sub
+                  (get_global $hangLimit)
+                  (i32.const 1)
                  )
                 )
                )
-               (f64.le
-                (loop $label$11 (result f64)
+               (block $label$14 (result i32)
+                (return
+                 (get_local $1)
+                )
+               )
+              )
+              (if (result i32)
+               (i32.eqz
+                (get_local $0)
+               )
+               (block $label$11 (result i32)
+                (get_local $0)
+               )
+               (i32.popcnt
+                (get_local $0)
+               )
+              )
+             )
+            )
+           )
+           (i32.const 31)
+          )
+         )
+        )
+       )
+      )
+      (block $label$15 (result i64)
+       (block $label$16 (result i64)
+        (select
+         (br_if $label$16
+          (i64.const 1)
+          (i32.eqz
+           (tee_local $0
+            (select
+             (get_local $0)
+             (get_local $0)
+             (get_local $0)
+            )
+           )
+          )
+         )
+         (loop $label$21 (result i64)
+          (block
+           (if
+            (i32.eqz
+             (get_global $hangLimit)
+            )
+            (return
+             (get_local $1)
+            )
+           )
+           (set_global $hangLimit
+            (i32.sub
+             (get_global $hangLimit)
+             (i32.const 1)
+            )
+           )
+          )
+          (block $label$22 (result i64)
+           (return
+            (get_local $1)
+           )
+          )
+         )
+         (loop $label$17 (result i32)
+          (block
+           (if
+            (i32.eqz
+             (get_global $hangLimit)
+            )
+            (return
+             (f64.const -9223372036854775808)
+            )
+           )
+           (set_global $hangLimit
+            (i32.sub
+             (get_global $hangLimit)
+             (i32.const 1)
+            )
+           )
+          )
+          (block $label$18 (result i32)
+           (if
+            (i32.eqz
+             (select
+              (i32.const -128)
+              (i32.const -12)
+              (i32.const 1561467741)
+             )
+            )
+            (block $label$19
+             (nop)
+            )
+            (loop $label$20
+             (block
+              (if
+               (i32.eqz
+                (get_global $hangLimit)
+               )
+               (return
+                (f64.const -nan:0xfffffffffff83)
+               )
+              )
+              (set_global $hangLimit
+               (i32.sub
+                (get_global $hangLimit)
+                (i32.const 1)
+               )
+              )
+             )
+             (set_local $0
+              (get_local $0)
+             )
+            )
+           )
+           (tee_local $0
+            (f32.lt
+             (call $deNan32
+              (f32.min
+               (f32.const 18446744073709551615)
+               (f32.const 11)
+              )
+             )
+             (call $deNan32
+              (select
+               (f32.const 2147483648)
+               (f32.const 18446744073709551615)
+               (get_local $0)
+              )
+             )
+            )
+           )
+          )
+         )
+        )
+       )
+      )
+      (select
+       (i64.load32_u offset=3 align=2
+        (i32.and
+         (i32.load16_u offset=4
+          (i32.and
+           (tee_local $0
+            (if (result i32)
+             (i32.trunc_u/f64
+              (get_local $1)
+             )
+             (block $label$27 (result i32)
+              (get_local $0)
+             )
+             (block $label$28 (result i32)
+              (get_local $0)
+             )
+            )
+           )
+           (i32.const 31)
+          )
+         )
+         (i32.const 31)
+        )
+       )
+       (i64.const 80)
+       (i32.trunc_s/f32
+        (call $deNan32
+         (f32.copysign
+          (f32.const 1.8061622339155704e-31)
+          (if (result f32)
+           (i32.eqz
+            (loop $label$23 (result i32)
+             (block
+              (if
+               (i32.eqz
+                (get_global $hangLimit)
+               )
+               (return
+                (f64.const 2.1384722118162242e-260)
+               )
+              )
+              (set_global $hangLimit
+               (i32.sub
+                (get_global $hangLimit)
+                (i32.const 1)
+               )
+              )
+             )
+             (i32.wrap/i64
+              (if (result i64)
+               (i32.eqz
+                (get_local $0)
+               )
+               (i64.const 18752)
+               (select
+                (i64.const 650785547958815753)
+                (i64.const 8463519829359949880)
+                (block $label$24 (result i32)
+                 (select
+                  (get_local $0)
+                  (i32.const 65535)
+                  (get_local $0)
+                 )
+                )
+               )
+              )
+             )
+            )
+           )
+           (block $label$25 (result f32)
+            (f32.const 14385)
+           )
+           (f32.const 4.2612939233197215e-37)
+          )
+         )
+        )
+       )
+      )
+     )
+     (block $label$29 (result i64)
+      (block $label$30 (result i64)
+       (return
+        (get_local $1)
+       )
+      )
+     )
+    )
+   )
+   (if
+    (block $label$31 (result i32)
+     (block $label$32
+      (if
+       (block $label$33 (result i32)
+        (loop $label$34 (result i32)
+         (block
+          (if
+           (i32.eqz
+            (get_global $hangLimit)
+           )
+           (return
+            (f64.const -nan:0xffffffffffff8)
+           )
+          )
+          (set_global $hangLimit
+           (i32.sub
+            (get_global $hangLimit)
+            (i32.const 1)
+           )
+          )
+         )
+         (if (result i32)
+          (i32.eqz
+           (if (result i32)
+            (block $label$35 (result i32)
+             (return
+              (get_local $1)
+             )
+            )
+            (i32.trunc_s/f64
+             (call $deNan64
+              (f64.convert_u/i32
+               (select
+                (get_local $0)
+                (if (result i32)
+                 (i32.eqz
+                  (block $label$36 (result i32)
+                   (get_local $0)
+                  )
+                 )
+                 (i64.gt_u
+                  (i64.const 155730402379)
+                  (i64.const 15)
+                 )
+                 (i32.const -2147483648)
+                )
+                (get_local $0)
+               )
+              )
+             )
+            )
+            (block $label$37 (result i32)
+             (drop
+              (f64.const 65483)
+             )
+             (select
+              (get_local $0)
+              (i32.trunc_s/f64
+               (block $label$38 (result f64)
+                (loop $label$39 (result f64)
                  (block
                   (if
                    (i32.eqz
                     (get_global $hangLimit)
                    )
                    (return
-                    (f32.const 1.1754943508222875e-38)
+                    (get_local $1)
                    )
                   )
                   (set_global $hangLimit
@@ -908,66 +510,197 @@
                    )
                   )
                  )
-                 (block $label$12 (result f64)
-                  (block $label$13 (result f64)
-                   (return
-                    (f32.const 3402823466385288598117041e14)
-                   )
+                 (call $deNan64
+                  (f64.add
+                   (get_local $1)
+                   (get_local $1)
                   )
                  )
                 )
-                (f64.const -88)
+               )
+              )
+              (i32.const 1751457892)
+             )
+            )
+           )
+          )
+          (i32.reinterpret/f32
+           (f32.const 9223372036854775808)
+          )
+          (get_local $0)
+         )
+        )
+       )
+       (nop)
+       (block $label$40
+        (set_local $1
+         (call $deNan64
+          (select
+           (f64.load offset=22 align=4
+            (i32.and
+             (if (result i32)
+              (i32.const -124)
+              (block $label$43 (result i32)
+               (br $label$32)
+              )
+              (block $label$44 (result i32)
+               (get_local $0)
+              )
+             )
+             (i32.const 31)
+            )
+           )
+           (call $deNan64
+            (f64.copysign
+             (call $deNan64
+              (f64.reinterpret/i64
+               (i64.ctz
+                (i64.trunc_u/f32
+                 (f32.const 65525)
+                )
                )
               )
              )
+             (get_local $1)
+            )
+           )
+           (loop $label$41 (result i32)
+            (block
+             (if
+              (i32.eqz
+               (get_global $hangLimit)
+              )
+              (return
+               (f64.const 9)
+              )
+             )
+             (set_global $hangLimit
+              (i32.sub
+               (get_global $hangLimit)
+               (i32.const 1)
+              )
+             )
+            )
+            (block $label$42 (result i32)
+             (br $label$40)
             )
            )
           )
          )
         )
        )
-       (i32.const 74)
+      )
+     )
+     (return
+      (get_local $1)
+     )
+    )
+    (block $label$45
+     (block $label$46
+      (br_if $label$45
+       (tee_local $0
+        (i32.trunc_s/f64
+         (loop $label$47 (result f64)
+          (block
+           (if
+            (i32.eqz
+             (get_global $hangLimit)
+            )
+            (return
+             (get_local $1)
+            )
+           )
+           (set_global $hangLimit
+            (i32.sub
+             (get_global $hangLimit)
+             (i32.const 1)
+            )
+           )
+          )
+          (block $label$48 (result f64)
+           (br $label$45)
+          )
+         )
+        )
+       )
       )
      )
     )
-    (block $label$20 (result f32)
+    (block $label$49
      (nop)
-     (nop)
+     (br_if $label$49
+      (get_local $0)
+     )
+    )
+   )
+   (if (result f64)
+    (i32.eqz
+     (i32.trunc_u/f32
+      (f32.const 2.0658355161339533e-21)
+     )
+    )
+    (call $deNan64
+     (select
+      (get_local $1)
+      (if (result f64)
+       (i32.eqz
+        (get_local $0)
+       )
+       (block $label$50 (result f64)
+        (return
+         (get_local $1)
+        )
+       )
+       (block $label$51 (result f64)
+        (return
+         (get_local $1)
+        )
+       )
+      )
+      (get_local $0)
+     )
+    )
+    (block $label$52 (result f64)
+     (if
+      (i32.reinterpret/f32
+       (f32.const -nan:0x7fffb9)
+      )
+      (nop)
+      (drop
+       (f64.const 8.308760937752171e-246)
+      )
+     )
+     (drop
+      (loop $label$53 (result i64)
+       (block
+        (if
+         (i32.eqz
+          (get_global $hangLimit)
+         )
+         (return
+          (get_local $1)
+         )
+        )
+        (set_global $hangLimit
+         (i32.sub
+          (get_global $hangLimit)
+          (i32.const 1)
+         )
+        )
+       )
+       (block $label$54 (result i64)
+        (i64.const -48)
+       )
+      )
+     )
      (return
-      (f32.const -3)
+      (f64.const 65520)
      )
     )
    )
   )
  )
- (func $func_4 (result i64)
-  (local $0 i32)
-  (block
-   (if
-    (i32.eqz
-     (get_global $hangLimit)
-    )
-    (return
-     (i64.const 9223372036854775807)
-    )
-   )
-   (set_global $hangLimit
-    (i32.sub
-     (get_global $hangLimit)
-     (i32.const 1)
-    )
-   )
-  )
-  (block $label$0 (result i64)
-   (return
-    (i64.const 9223372036854775807)
-   )
-  )
- )
- (func $func_5
-  (local $0 f64)
-  (local $1 i32)
-  (local $2 i32)
+ (func $func_2 (param $0 f32)
   (block
    (if
     (i32.eqz
@@ -982,188 +715,20 @@
     )
    )
   )
-  (drop
-   (call $func_3)
-  )
- )
- (func $func_6 (result f32)
-  (local $0 i64)
-  (local $1 f32)
-  (local $2 f64)
-  (local $3 i64)
-  (local $4 i64)
-  (local $5 f32)
-  (block
+  (block $label$0
    (if
     (i32.eqz
-     (get_global $hangLimit)
-    )
-    (return
-     (f32.const -1)
-    )
-   )
-   (set_global $hangLimit
-    (i32.sub
-     (get_global $hangLimit)
-     (i32.const 1)
-    )
-   )
-  )
-  (call $func_1)
- )
- (func $func_7 (result f32)
-  (local $0 f32)
-  (local $1 i32)
-  (block
-   (if
-    (i32.eqz
-     (get_global $hangLimit)
-    )
-    (return
-     (get_local $0)
-    )
-   )
-   (set_global $hangLimit
-    (i32.sub
-     (get_global $hangLimit)
-     (i32.const 1)
-    )
-   )
-  )
-  (if (result f32)
-   (tee_local $1
-    (tee_local $1
-     (i32.const 65535)
-    )
-   )
-   (loop $label$0 (result f32)
-    (block
-     (if
-      (i32.eqz
-       (get_global $hangLimit)
-      )
-      (return
-       (get_local $0)
-      )
-     )
-     (set_global $hangLimit
-      (i32.sub
-       (get_global $hangLimit)
-       (i32.const 1)
-      )
-     )
-    )
-    (block $label$1 (result f32)
-     (tee_local $0
-      (tee_local $0
-       (if (result f32)
-        (i32.load16_s offset=22 align=1
-         (i32.and
-          (if (result i32)
-           (tee_local $1
-            (get_local $1)
-           )
-           (block $label$2 (result i32)
-            (return
-             (get_local $0)
-            )
-           )
-           (block $label$3 (result i32)
-            (return
-             (get_local $0)
-            )
-           )
-          )
-          (i32.const 31)
-         )
-        )
-        (tee_local $0
-         (f32.load offset=22
-          (i32.and
-           (i32.const 32767)
-           (i32.const 31)
-          )
-         )
-        )
-        (block $label$4 (result f32)
-         (br $label$0)
-        )
-       )
-      )
-     )
-    )
-   )
-   (block $label$5 (result f32)
-    (br_if $label$5
-     (tee_local $0
-      (call $deNan32
-       (f32.max
-        (f32.load offset=22
-         (i32.and
-          (select
-           (tee_local $1
-            (call $func_0)
-           )
-           (tee_local $1
-            (i32.load8_s offset=4
-             (i32.and
-              (block $label$10 (result i32)
-               (return
-                (f32.const -27)
-               )
-              )
-              (i32.const 31)
-             )
-            )
-           )
-           (i32.rem_u
-            (loop $label$8 (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 $label$9 (result i32)
-              (i32.shr_u
-               (select
-                (i32.const 1497849685)
-                (tee_local $1
-                 (tee_local $1
-                  (get_local $1)
-                 )
-                )
-                (get_local $1)
-               )
-               (get_local $1)
-              )
-             )
-            )
-            (call $func_0)
-           )
-          )
-          (i32.const 31)
-         )
-        )
-        (loop $label$11 (result f32)
+     (if (result i32)
+      (call $func_0)
+      (block $label$1 (result i32)
+       (block $label$2
+        (loop $label$3
          (block
           (if
            (i32.eqz
             (get_global $hangLimit)
            )
-           (return
-            (get_local $0)
-           )
+           (return)
           )
           (set_global $hangLimit
            (i32.sub
@@ -1172,66 +737,326 @@
            )
           )
          )
-         (block $label$12 (result f32)
-          (tee_local $0
-           (block $label$13 (result f32)
-            (return
-             (f32.const -nan:0x7fffec)
+         (block $label$4
+          (nop)
+         )
+        )
+       )
+       (if (result i32)
+        (i32.eqz
+         (if (result i32)
+          (i32.load8_s offset=4
+           (i32.and
+            (if (result i32)
+             (i32.eqz
+              (call $func_0)
+             )
+             (block $label$5 (result i32)
+              (br $label$0)
+             )
+             (block $label$6 (result i32)
+              (br $label$0)
+             )
+            )
+            (i32.const 31)
+           )
+          )
+          (i32.const 359492883)
+          (call $func_0)
+         )
+        )
+        (block $label$7 (result i32)
+         (br $label$0)
+        )
+        (block $label$8 (result i32)
+         (i32.const 22536)
+        )
+       )
+      )
+      (block $label$9 (result i32)
+       (nop)
+       (br_if $label$0
+        (i32.eqz
+         (block $label$10 (result i32)
+          (br $label$0)
+         )
+        )
+       )
+       (br $label$0)
+      )
+     )
+    )
+    (if
+     (i32.const 65441)
+     (nop)
+     (block $label$11
+      (loop $label$12
+       (block
+        (if
+         (i32.eqz
+          (get_global $hangLimit)
+         )
+         (return)
+        )
+        (set_global $hangLimit
+         (i32.sub
+          (get_global $hangLimit)
+          (i32.const 1)
+         )
+        )
+       )
+       (block $label$13
+        (nop)
+       )
+      )
+     )
+    )
+    (block $label$14
+     (if
+      (i32.eqz
+       (call $func_0)
+      )
+      (block $label$15
+       (loop $label$16
+        (block
+         (if
+          (i32.eqz
+           (get_global $hangLimit)
+          )
+          (return)
+         )
+         (set_global $hangLimit
+          (i32.sub
+           (get_global $hangLimit)
+           (i32.const 1)
+          )
+         )
+        )
+        (block $label$17
+         (block $label$18
+          (loop $label$19
+           (block
+            (if
+             (i32.eqz
+              (get_global $hangLimit)
+             )
+             (return)
+            )
+            (set_global $hangLimit
+             (i32.sub
+              (get_global $hangLimit)
+              (i32.const 1)
+             )
+            )
+           )
+           (nop)
+          )
+         )
+        )
+       )
+      )
+      (block $label$20
+       (loop $label$21
+        (block
+         (if
+          (i32.eqz
+           (get_global $hangLimit)
+          )
+          (return)
+         )
+         (set_global $hangLimit
+          (i32.sub
+           (get_global $hangLimit)
+           (i32.const 1)
+          )
+         )
+        )
+        (if
+         (i32.trunc_u/f64
+          (call $deNan64
+           (f64.convert_u/i32
+            (i32.clz
+             (call $func_0)
+            )
+           )
+          )
+         )
+         (nop)
+         (drop
+          (if (result i64)
+           (i32.eqz
+            (loop $label$22 (result i32)
+             (block
+              (if
+               (i32.eqz
+                (get_global $hangLimit)
+               )
+               (return)
+              )
+              (set_global $hangLimit
+               (i32.sub
+                (get_global $hangLimit)
+                (i32.const 1)
+               )
+              )
+             )
+             (block $label$23 (result i32)
+              (select
+               (i32.const 2113936401)
+               (i32.const 0)
+               (select
+                (i32.const 2147483647)
+                (i32.const 1297751887)
+                (i32.const 5191)
+               )
+              )
+             )
+            )
+           )
+           (block $label$24 (result i64)
+            (br $label$0)
+           )
+           (block $label$25 (result i64)
+            (loop $label$26 (result i64)
+             (block
+              (if
+               (i32.eqz
+                (get_global $hangLimit)
+               )
+               (return)
+              )
+              (set_global $hangLimit
+               (i32.sub
+                (get_global $hangLimit)
+                (i32.const 1)
+               )
+              )
+             )
+             (block $label$27 (result i64)
+              (i64.reinterpret/f64
+               (f64.const -nan:0xfffffffffffb7)
+              )
+             )
             )
            )
           )
          )
         )
        )
-      )
-     )
-     (i32.eqz
-      (block $label$6 (result i32)
-       (i32.load16_s offset=4 align=1
-        (i32.and
-         (loop $label$7 (result i32)
-          (block
-           (if
-            (i32.eqz
-             (get_global $hangLimit)
-            )
-            (return
-             (f32.const 65486)
-            )
-           )
-           (set_global $hangLimit
-            (i32.sub
-             (get_global $hangLimit)
-             (i32.const 1)
+       (drop
+        (call $func_1)
+       )
+       (block $label$28
+        (if
+         (i32.const 18500)
+         (nop)
+         (if
+          (i32.eqz
+           (i32.const -122)
+          )
+          (block $label$29
+           (set_local $0
+            (loop $label$30 (result f32)
+             (block
+              (if
+               (i32.eqz
+                (get_global $hangLimit)
+               )
+               (return)
+              )
+              (set_global $hangLimit
+               (i32.sub
+                (get_global $hangLimit)
+                (i32.const 1)
+               )
+              )
+             )
+             (f32.load offset=22 align=2
+              (i32.and
+               (block $label$31 (result i32)
+                (i64.eqz
+                 (i64.const -2147483648)
+                )
+               )
+               (i32.const 31)
+              )
+             )
             )
            )
           )
-          (tee_local $1
-           (i32.load offset=22
+          (f32.store offset=4 align=1
+           (i32.and
+            (loop $label$32 (result i32)
+             (block
+              (if
+               (i32.eqz
+                (get_global $hangLimit)
+               )
+               (return)
+              )
+              (set_global $hangLimit
+               (i32.sub
+                (get_global $hangLimit)
+                (i32.const 1)
+               )
+              )
+             )
+             (i32.wrap/i64
+              (i64.const -125)
+             )
+            )
+            (i32.const 31)
+           )
+           (f32.load offset=4 align=1
             (i32.and
-             (get_local $1)
+             (i32.const 23)
              (i32.const 31)
             )
            )
           )
          )
-         (i32.const 31)
+        )
+        (br_if $label$0
+         (i32.eqz
+          (i32.const -128)
+         )
         )
        )
       )
      )
     )
    )
+   (br_if $label$0
+    (loop $label$33 (result i32)
+     (block
+      (if
+       (i32.eqz
+        (get_global $hangLimit)
+       )
+       (return)
+      )
+      (set_global $hangLimit
+       (i32.sub
+        (get_global $hangLimit)
+        (i32.const 1)
+       )
+      )
+     )
+     (block $label$34 (result i32)
+      (br $label$0)
+     )
+    )
+   )
   )
  )
- (func $func_8 (result i32)
+ (func $func_3 (param $0 f64) (param $1 f64) (param $2 f64) (result f32)
   (block
    (if
     (i32.eqz
      (get_global $hangLimit)
     )
     (return
-     (i32.const 65535)
+     (f32.const -nan:0x7fff97)
     )
    )
    (set_global $hangLimit
@@ -1241,132 +1066,256 @@
     )
    )
   )
-  (block $label$0 (result i32)
-   (f32.eq
-    (f32.const -nan:0x7ffff1)
-    (call $deNan32
-     (select
-      (block $label$3 (result f32)
+  (call $deNan32
+   (f32.sqrt
+    (if (result f32)
+     (loop $label$0 (result i32)
+      (block
+       (if
+        (i32.eqz
+         (get_global $hangLimit)
+        )
+        (return
+         (f32.const 9223372036854775808)
+        )
+       )
+       (set_global $hangLimit
+        (i32.sub
+         (get_global $hangLimit)
+         (i32.const 1)
+        )
+       )
+      )
+      (block $label$1 (result i32)
        (return
+        (f32.const 9223372036854775808)
+       )
+      )
+     )
+     (block $label$2 (result f32)
+      (block $label$3 (result f32)
+       (f32.const 2147483648)
+      )
+     )
+     (f32.const 8764)
+    )
+   )
+  )
+ )
+ (func $func_4
+  (local $0 i64)
+  (local $1 i64)
+  (local $2 f32)
+  (local $3 f64)
+  (local $4 f64)
+  (local $5 f64)
+  (local $6 f32)
+  (block
+   (if
+    (i32.eqz
+     (get_global $hangLimit)
+    )
+    (return)
+   )
+   (set_global $hangLimit
+    (i32.sub
+     (get_global $hangLimit)
+     (i32.const 1)
+    )
+   )
+  )
+  (nop)
+ )
+ (func $func_5 (param $0 i64) (param $1 i64) (result f64)
+  (block
+   (if
+    (i32.eqz
+     (get_global $hangLimit)
+    )
+    (return
+     (f64.const -100)
+    )
+   )
+   (set_global $hangLimit
+    (i32.sub
+     (get_global $hangLimit)
+     (i32.const 1)
+    )
+   )
+  )
+  (f64.const 1)
+ )
+ (func $func_6 (result i32)
+  (local $0 f64)
+  (block
+   (if
+    (i32.eqz
+     (get_global $hangLimit)
+    )
+    (return
+     (i32.const 2147483647)
+    )
+   )
+   (set_global $hangLimit
+    (i32.sub
+     (get_global $hangLimit)
+     (i32.const 1)
+    )
+   )
+  )
+  (select
+   (select
+    (loop $label$1 (result i32)
+     (block
+      (if
+       (i32.eqz
+        (get_global $hangLimit)
+       )
+       (return
+        (i32.const 0)
+       )
+      )
+      (set_global $hangLimit
+       (i32.sub
+        (get_global $hangLimit)
         (i32.const 1)
        )
       )
-      (if (result f32)
-       (i32.eqz
-        (i32.const 709173281)
-       )
-       (block $label$4 (result f32)
-        (f32.const 8.104309321630391e-21)
-       )
-       (block $label$5 (result f32)
-        (drop
-         (i32.shr_u
-          (br_if $label$0
-           (block $label$7 (result i32)
-            (return
-             (i32.const 65432)
-            )
-           )
-           (i32.eqz
-            (i32.wrap/i64
-             (loop $label$6 (result i64)
-              (block
-               (if
-                (i32.eqz
-                 (get_global $hangLimit)
-                )
-                (return
-                 (i32.const 65425)
-                )
-               )
-               (set_global $hangLimit
-                (i32.sub
-                 (get_global $hangLimit)
-                 (i32.const 1)
-                )
-               )
-              )
-              (i64.xor
-               (i64.extend_u/i32
-                (br_if $label$0
-                 (i32.const 12)
-                 (i32.div_u
-                  (i32.const -96)
-                  (i32.const 0)
-                 )
-                )
-               )
-               (i64.const 8606517916339761162)
-              )
-             )
-            )
-           )
-          )
-          (f32.le
-           (call $func_6)
-           (call $deNan32
-            (f32.sub
-             (f32.const 9223372036854775808)
-             (f32.const 22107)
-            )
-           )
-          )
-         )
-        )
-        (if
-         (i32.eqz
-          (i32.const 1543)
-         )
-         (block $label$8
-          (br_if $label$8
-           (i32.load8_u offset=4
+     )
+     (block $label$2 (result i32)
+      (i32.load offset=4
+       (br_if $label$2
+        (i32.const -76)
+        (i32.eqz
+         (i32.load8_s offset=4
+          (i32.and
+           (i32.load offset=22 align=1
             (i32.and
-             (i32.const 126)
+             (i32.const 92)
              (i32.const 31)
             )
            )
+           (i32.const 31)
           )
          )
-         (nop)
-        )
-        (f32.const 1.1754943508222875e-38)
-       )
-      )
-      (select
-       (loop $label$1 (result i32)
-        (block
-         (if
-          (i32.eqz
-           (get_global $hangLimit)
-          )
-          (return
-           (i32.const -80)
-          )
-         )
-         (set_global $hangLimit
-          (i32.sub
-           (get_global $hangLimit)
-           (i32.const 1)
-          )
-         )
-        )
-        (block $label$2 (result i32)
-         (return
-          (i32.const 65509)
-         )
-        )
-       )
-       (i32.const 509639793)
-       (i32.trunc_s/f64
-        (call $deNan64
-         (f64.convert_u/i32
-          (i32.const 65487)
-         )
         )
        )
       )
      )
     )
+    (block $label$3 (result i32)
+     (return
+      (i32.const 26)
+     )
+    )
+    (call $func_0)
+   )
+   (select
+    (block $label$9 (result i32)
+     (loop $label$10
+      (block
+       (if
+        (i32.eqz
+         (get_global $hangLimit)
+        )
+        (return
+         (i32.const 1)
+        )
+       )
+       (set_global $hangLimit
+        (i32.sub
+         (get_global $hangLimit)
+         (i32.const 1)
+        )
+       )
+      )
+      (block $label$11
+       (i32.store16 offset=2 align=1
+        (i32.const -91)
+        (i32.load16_s offset=4 align=1
+         (i32.ctz
+          (block $label$12 (result i32)
+           (select
+            (i32.load offset=4 align=2
+             (i32.and
+              (i32.const -113)
+              (i32.const 31)
+             )
+            )
+            (call $func_0)
+            (block $label$13 (result i32)
+             (return
+              (i32.const -32768)
+             )
+            )
+           )
+          )
+         )
+        )
+       )
+      )
+     )
+     (i32.const 255)
+    )
+    (i32.const 127)
+    (select
+     (if (result i32)
+      (block $label$4 (result i32)
+       (i32.load offset=22
+        (i32.and
+         (br_if $label$4
+          (i32.load16_u offset=2
+           (i32.and
+            (i32.const 226)
+            (i32.const 31)
+           )
+          )
+          (i32.eqz
+           (select
+            (block $label$5 (result i32)
+             (i32.const -32768)
+            )
+            (i32.const 354161438)
+            (i64.gt_s
+             (i64.const -18)
+             (i64.const 2835340575676513842)
+            )
+           )
+          )
+         )
+         (i32.const 31)
+        )
+       )
+      )
+      (i32.const -128)
+      (block $label$6 (result i32)
+       (return
+        (i32.const 65442)
+       )
+      )
+     )
+     (block $label$7 (result i32)
+      (i32.load offset=22 align=1
+       (i32.and
+        (block $label$8 (result i32)
+         (return
+          (i32.const 255)
+         )
+        )
+        (i32.const 31)
+       )
+      )
+     )
+     (i32.lt_s
+      (i32.const -20)
+      (i32.const -2147483648)
+     )
+    )
+   )
+   (block $label$0 (result i32)
+    (return
+     (i32.const -86)
+    )
    )
   )
  )