summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/spec/spec/float_exprs.wast.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/wasm/spec/spec/float_exprs.wast.js')
-rw-r--r--js/src/jit-test/tests/wasm/spec/spec/float_exprs.wast.js7295
1 files changed, 7295 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/spec/spec/float_exprs.wast.js b/js/src/jit-test/tests/wasm/spec/spec/float_exprs.wast.js
new file mode 100644
index 0000000000..120b1402c4
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/spec/spec/float_exprs.wast.js
@@ -0,0 +1,7295 @@
+/* Copyright 2021 Mozilla Foundation
+ *
+ * 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.
+ */
+
+// ./test/core/float_exprs.wast
+
+// ./test/core/float_exprs.wast:6
+let $0 = instantiate(`(module
+ (func (export "f64.no_contraction") (param $$x f64) (param $$y f64) (param $$z f64) (result f64)
+ (f64.add (f64.mul (local.get $$x) (local.get $$y)) (local.get $$z)))
+)`);
+
+// ./test/core/float_exprs.wast:11
+assert_return(
+ () => invoke($0, `f64.no_contraction`, [
+ value("f64", -0.00000000000000000000000000000015967133604096234),
+ value("f64", 87633521608271230000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 42896576204898460000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -13992561434270632000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:12
+assert_return(
+ () => invoke($0, `f64.no_contraction`, [
+ value("f64", 8341016642481988),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003223424965918293),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023310835741659086),
+ ]),
+ [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000026886641288847496),
+ ],
+);
+
+// ./test/core/float_exprs.wast:13
+assert_return(
+ () => invoke($0, `f64.no_contraction`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030119045290520013),
+ value("f64", 52699336439236750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.00000000000000000000000000000006654454781339856),
+ ]),
+ [value("f64", -0.0000000000000000015872537009936566)],
+);
+
+// ./test/core/float_exprs.wast:14
+assert_return(
+ () => invoke($0, `f64.no_contraction`, [
+ value("f64", 0.0000000000000000000031413936116780743),
+ value("f64", -0.0000000000000000000000000000007262766035707377),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000004619684894228461),
+ ]),
+ [
+ value("f64", -0.00000000000000000000000000000000000000000000000000228152068276836),
+ ],
+);
+
+// ./test/core/float_exprs.wast:15
+assert_return(
+ () => invoke($0, `f64.no_contraction`, [
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016080464217402378),
+ value("f64", -382103410226833000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.00000000000000010541980504151345),
+ ]),
+ [value("f64", 0.00006144400215510552)],
+);
+
+// ./test/core/float_exprs.wast:19
+let $1 = instantiate(`(module
+ (func (export "f32.no_fma") (param $$x f32) (param $$y f32) (param $$z f32) (result f32)
+ (f32.add (f32.mul (local.get $$x) (local.get $$y)) (local.get $$z)))
+ (func (export "f64.no_fma") (param $$x f64) (param $$y f64) (param $$z f64) (result f64)
+ (f64.add (f64.mul (local.get $$x) (local.get $$y)) (local.get $$z)))
+)`);
+
+// ./test/core/float_exprs.wast:26
+assert_return(
+ () => invoke($1, `f32.no_fma`, [
+ value("f32", 35184304000000000000000000000000000000),
+ value("f32", 0.00000021584361),
+ value("f32", 259340640000000000000000000000000),
+ ]),
+ [value("f32", 266934960000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:27
+assert_return(
+ () => invoke($1, `f32.no_fma`, [
+ value("f32", 0.0000000071753243),
+ value("f32", -0.000000000000001225534),
+ value("f32", 0.0000000000000000000000000041316436),
+ ]),
+ [value("f32", -0.0000000000000000000000087894724)],
+);
+
+// ./test/core/float_exprs.wast:28
+assert_return(
+ () => invoke($1, `f32.no_fma`, [
+ value("f32", 231063440000),
+ value("f32", 0.00020773262),
+ value("f32", 1797.6421),
+ ]),
+ [value("f32", 48001210)],
+);
+
+// ./test/core/float_exprs.wast:29
+assert_return(
+ () => invoke($1, `f32.no_fma`, [
+ value("f32", 0.0045542703),
+ value("f32", -7265493.5),
+ value("f32", -2.3964283),
+ ]),
+ [value("f32", -33091.414)],
+);
+
+// ./test/core/float_exprs.wast:30
+assert_return(
+ () => invoke($1, `f32.no_fma`, [
+ value("f32", 98881730000000000000000000000000000000),
+ value("f32", -0.0000000000000000000008570631),
+ value("f32", -21579143000),
+ ]),
+ [value("f32", -84747910000000000)],
+);
+
+// ./test/core/float_exprs.wast:31
+assert_return(
+ () => invoke($1, `f64.no_fma`, [
+ value("f64", 789084284375179200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 4215020052117360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -1336601081131744700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 1989405000320312800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:32
+assert_return(
+ () => invoke($1, `f64.no_fma`, [
+ value("f64", 5586822348009285500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.0000000000000000000000000000000000000007397302005677334),
+ value("f64", 36567834172040920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 4132741216029240700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:33
+assert_return(
+ () => invoke($1, `f64.no_fma`, [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014260477822274587),
+ value("f64", -31087632036599860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 343269235523777630000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -4433244872049653000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:34
+assert_return(
+ () => invoke($1, `f64.no_fma`, [
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000809034701735478),
+ value("f64", -24874417850667450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 49484765138510810),
+ ]),
+ [value("f64", 250727437405094720)],
+);
+
+// ./test/core/float_exprs.wast:35
+assert_return(
+ () => invoke($1, `f64.no_fma`, [
+ value("f64", 6723256985364377),
+ value("f64", 285456566692879460000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -5593839470050757000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 1919197856036028600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:40
+let $2 = instantiate(`(module
+ (func (export "f32.no_fold_add_zero") (param $$x f32) (result f32)
+ (f32.add (local.get $$x) (f32.const 0.0)))
+ (func (export "f64.no_fold_add_zero") (param $$x f64) (result f64)
+ (f64.add (local.get $$x) (f64.const 0.0)))
+)`);
+
+// ./test/core/float_exprs.wast:47
+assert_return(() => invoke($2, `f32.no_fold_add_zero`, [value("f32", -0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:48
+assert_return(() => invoke($2, `f64.no_fold_add_zero`, [value("f64", -0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:49
+assert_return(
+ () => invoke($2, `f32.no_fold_add_zero`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:50
+assert_return(
+ () => invoke($2, `f64.no_fold_add_zero`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:54
+let $3 = instantiate(`(module
+ (func (export "f32.no_fold_zero_sub") (param $$x f32) (result f32)
+ (f32.sub (f32.const 0.0) (local.get $$x)))
+ (func (export "f64.no_fold_zero_sub") (param $$x f64) (result f64)
+ (f64.sub (f64.const 0.0) (local.get $$x)))
+)`);
+
+// ./test/core/float_exprs.wast:61
+assert_return(() => invoke($3, `f32.no_fold_zero_sub`, [value("f32", 0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:62
+assert_return(() => invoke($3, `f64.no_fold_zero_sub`, [value("f64", 0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:63
+assert_return(
+ () => invoke($3, `f32.no_fold_zero_sub`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:64
+assert_return(
+ () => invoke($3, `f64.no_fold_zero_sub`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:68
+let $4 = instantiate(`(module
+ (func (export "f32.no_fold_sub_zero") (param $$x f32) (result f32)
+ (f32.sub (local.get $$x) (f32.const 0.0)))
+ (func (export "f64.no_fold_sub_zero") (param $$x f64) (result f64)
+ (f64.sub (local.get $$x) (f64.const 0.0)))
+)`);
+
+// ./test/core/float_exprs.wast:75
+assert_return(
+ () => invoke($4, `f32.no_fold_sub_zero`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:76
+assert_return(
+ () => invoke($4, `f64.no_fold_sub_zero`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:80
+let $5 = instantiate(`(module
+ (func (export "f32.no_fold_mul_zero") (param $$x f32) (result f32)
+ (f32.mul (local.get $$x) (f32.const 0.0)))
+ (func (export "f64.no_fold_mul_zero") (param $$x f64) (result f64)
+ (f64.mul (local.get $$x) (f64.const 0.0)))
+)`);
+
+// ./test/core/float_exprs.wast:87
+assert_return(() => invoke($5, `f32.no_fold_mul_zero`, [value("f32", -0)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:88
+assert_return(() => invoke($5, `f32.no_fold_mul_zero`, [value("f32", -1)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:89
+assert_return(() => invoke($5, `f32.no_fold_mul_zero`, [value("f32", -2)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:90
+assert_return(
+ () => invoke($5, `f32.no_fold_mul_zero`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:91
+assert_return(() => invoke($5, `f64.no_fold_mul_zero`, [value("f64", -0)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:92
+assert_return(() => invoke($5, `f64.no_fold_mul_zero`, [value("f64", -1)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:93
+assert_return(() => invoke($5, `f64.no_fold_mul_zero`, [value("f64", -2)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:94
+assert_return(
+ () => invoke($5, `f64.no_fold_mul_zero`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:99
+let $6 = instantiate(`(module
+ (func (export "f32.no_fold_mul_one") (param $$x f32) (result f32)
+ (f32.mul (local.get $$x) (f32.const 1.0)))
+ (func (export "f64.no_fold_mul_one") (param $$x f64) (result f64)
+ (f64.mul (local.get $$x) (f64.const 1.0)))
+)`);
+
+// ./test/core/float_exprs.wast:106
+assert_return(
+ () => invoke($6, `f32.no_fold_mul_one`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:107
+assert_return(
+ () => invoke($6, `f64.no_fold_mul_one`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:111
+let $7 = instantiate(`(module
+ (func (export "f32.no_fold_zero_div") (param $$x f32) (result f32)
+ (f32.div (f32.const 0.0) (local.get $$x)))
+ (func (export "f64.no_fold_zero_div") (param $$x f64) (result f64)
+ (f64.div (f64.const 0.0) (local.get $$x)))
+)`);
+
+// ./test/core/float_exprs.wast:118
+assert_return(() => invoke($7, `f32.no_fold_zero_div`, [value("f32", 0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:119
+assert_return(() => invoke($7, `f32.no_fold_zero_div`, [value("f32", -0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:120
+assert_return(
+ () => invoke($7, `f32.no_fold_zero_div`, [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:121
+assert_return(
+ () => invoke($7, `f32.no_fold_zero_div`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:122
+assert_return(() => invoke($7, `f64.no_fold_zero_div`, [value("f64", 0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:123
+assert_return(() => invoke($7, `f64.no_fold_zero_div`, [value("f64", -0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:124
+assert_return(
+ () => invoke($7, `f64.no_fold_zero_div`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:125
+assert_return(
+ () => invoke($7, `f64.no_fold_zero_div`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:129
+let $8 = instantiate(`(module
+ (func (export "f32.no_fold_div_one") (param $$x f32) (result f32)
+ (f32.div (local.get $$x) (f32.const 1.0)))
+ (func (export "f64.no_fold_div_one") (param $$x f64) (result f64)
+ (f64.div (local.get $$x) (f64.const 1.0)))
+)`);
+
+// ./test/core/float_exprs.wast:136
+assert_return(
+ () => invoke($8, `f32.no_fold_div_one`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:137
+assert_return(
+ () => invoke($8, `f64.no_fold_div_one`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:141
+let $9 = instantiate(`(module
+ (func (export "f32.no_fold_div_neg1") (param $$x f32) (result f32)
+ (f32.div (local.get $$x) (f32.const -1.0)))
+ (func (export "f64.no_fold_div_neg1") (param $$x f64) (result f64)
+ (f64.div (local.get $$x) (f64.const -1.0)))
+)`);
+
+// ./test/core/float_exprs.wast:148
+assert_return(
+ () => invoke($9, `f32.no_fold_div_neg1`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:149
+assert_return(
+ () => invoke($9, `f64.no_fold_div_neg1`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:153
+let $10 = instantiate(`(module
+ (func (export "f32.no_fold_neg0_sub") (param $$x f32) (result f32)
+ (f32.sub (f32.const -0.0) (local.get $$x)))
+ (func (export "f64.no_fold_neg0_sub") (param $$x f64) (result f64)
+ (f64.sub (f64.const -0.0) (local.get $$x)))
+)`);
+
+// ./test/core/float_exprs.wast:160
+assert_return(
+ () => invoke($10, `f32.no_fold_neg0_sub`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:161
+assert_return(
+ () => invoke($10, `f64.no_fold_neg0_sub`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:165
+let $11 = instantiate(`(module
+ (func (export "f32.no_fold_neg1_mul") (param $$x f32) (result f32)
+ (f32.mul (f32.const -1.0) (local.get $$x)))
+ (func (export "f64.no_fold_neg1_mul") (param $$x f64) (result f64)
+ (f64.mul (f64.const -1.0) (local.get $$x)))
+)`);
+
+// ./test/core/float_exprs.wast:172
+assert_return(
+ () => invoke($11, `f32.no_fold_neg1_mul`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:173
+assert_return(
+ () => invoke($11, `f64.no_fold_neg1_mul`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:177
+let $12 = instantiate(`(module
+ (func (export "f32.no_fold_eq_self") (param $$x f32) (result i32)
+ (f32.eq (local.get $$x) (local.get $$x)))
+ (func (export "f64.no_fold_eq_self") (param $$x f64) (result i32)
+ (f64.eq (local.get $$x) (local.get $$x)))
+)`);
+
+// ./test/core/float_exprs.wast:184
+assert_return(
+ () => invoke($12, `f32.no_fold_eq_self`, [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:185
+assert_return(
+ () => invoke($12, `f64.no_fold_eq_self`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:189
+let $13 = instantiate(`(module
+ (func (export "f32.no_fold_ne_self") (param $$x f32) (result i32)
+ (f32.ne (local.get $$x) (local.get $$x)))
+ (func (export "f64.no_fold_ne_self") (param $$x f64) (result i32)
+ (f64.ne (local.get $$x) (local.get $$x)))
+)`);
+
+// ./test/core/float_exprs.wast:196
+assert_return(
+ () => invoke($13, `f32.no_fold_ne_self`, [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:197
+assert_return(
+ () => invoke($13, `f64.no_fold_ne_self`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:201
+let $14 = instantiate(`(module
+ (func (export "f32.no_fold_sub_self") (param $$x f32) (result f32)
+ (f32.sub (local.get $$x) (local.get $$x)))
+ (func (export "f64.no_fold_sub_self") (param $$x f64) (result f64)
+ (f64.sub (local.get $$x) (local.get $$x)))
+)`);
+
+// ./test/core/float_exprs.wast:208
+assert_return(() => invoke($14, `f32.no_fold_sub_self`, [value("f32", Infinity)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:209
+assert_return(
+ () => invoke($14, `f32.no_fold_sub_self`, [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:210
+assert_return(() => invoke($14, `f64.no_fold_sub_self`, [value("f64", Infinity)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:211
+assert_return(
+ () => invoke($14, `f64.no_fold_sub_self`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:215
+let $15 = instantiate(`(module
+ (func (export "f32.no_fold_div_self") (param $$x f32) (result f32)
+ (f32.div (local.get $$x) (local.get $$x)))
+ (func (export "f64.no_fold_div_self") (param $$x f64) (result f64)
+ (f64.div (local.get $$x) (local.get $$x)))
+)`);
+
+// ./test/core/float_exprs.wast:222
+assert_return(() => invoke($15, `f32.no_fold_div_self`, [value("f32", Infinity)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:223
+assert_return(
+ () => invoke($15, `f32.no_fold_div_self`, [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:224
+assert_return(() => invoke($15, `f32.no_fold_div_self`, [value("f32", 0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:225
+assert_return(() => invoke($15, `f32.no_fold_div_self`, [value("f32", -0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:226
+assert_return(() => invoke($15, `f64.no_fold_div_self`, [value("f64", Infinity)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:227
+assert_return(
+ () => invoke($15, `f64.no_fold_div_self`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:228
+assert_return(() => invoke($15, `f64.no_fold_div_self`, [value("f64", 0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:229
+assert_return(() => invoke($15, `f64.no_fold_div_self`, [value("f64", -0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:233
+let $16 = instantiate(`(module
+ (func (export "f32.no_fold_div_3") (param $$x f32) (result f32)
+ (f32.div (local.get $$x) (f32.const 3.0)))
+ (func (export "f64.no_fold_div_3") (param $$x f64) (result f64)
+ (f64.div (local.get $$x) (f64.const 3.0)))
+)`);
+
+// ./test/core/float_exprs.wast:240
+assert_return(
+ () => invoke($16, `f32.no_fold_div_3`, [value("f32", -1361679000000000)]),
+ [value("f32", -453892980000000)],
+);
+
+// ./test/core/float_exprs.wast:241
+assert_return(
+ () => invoke($16, `f32.no_fold_div_3`, [value("f32", -18736880000000000000000000000)]),
+ [value("f32", -6245626600000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:242
+assert_return(
+ () => invoke($16, `f32.no_fold_div_3`, [
+ value("f32", -0.00000000000000000000000012045131),
+ ]),
+ [value("f32", -0.000000000000000000000000040150435)],
+);
+
+// ./test/core/float_exprs.wast:243
+assert_return(
+ () => invoke($16, `f32.no_fold_div_3`, [
+ value("f32", -0.00000000000000000000000000000000000005281346),
+ ]),
+ [value("f32", -0.000000000000000000000000000000000000017604486)],
+);
+
+// ./test/core/float_exprs.wast:244
+assert_return(
+ () => invoke($16, `f32.no_fold_div_3`, [value("f32", -0.000000000000000025495563)]),
+ [value("f32", -0.000000000000000008498521)],
+);
+
+// ./test/core/float_exprs.wast:245
+assert_return(
+ () => invoke($16, `f64.no_fold_div_3`, [
+ value("f64", -29563579573969634000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -9854526524656545000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:246
+assert_return(
+ () => invoke($16, `f64.no_fold_div_3`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000009291150921449772),
+ ]),
+ [
+ value("f64", -0.000000000000000000000000000000000000000000000000003097050307149924),
+ ],
+);
+
+// ./test/core/float_exprs.wast:247
+assert_return(
+ () => invoke($16, `f64.no_fold_div_3`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013808061543557006),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004602687181185669),
+ ],
+);
+
+// ./test/core/float_exprs.wast:248
+assert_return(
+ () => invoke($16, `f64.no_fold_div_3`, [
+ value("f64", -1378076163468349000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -459358721156116300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:249
+assert_return(
+ () => invoke($16, `f64.no_fold_div_3`, [
+ value("f64", 86324008088313660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 28774669362771220000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:253
+let $17 = instantiate(`(module
+ (func (export "f32.no_factor") (param $$x f32) (param $$y f32) (param $$z f32) (result f32)
+ (f32.add (f32.mul (local.get $$x) (local.get $$z)) (f32.mul (local.get $$y) (local.get $$z))))
+ (func (export "f64.no_factor") (param $$x f64) (param $$y f64) (param $$z f64) (result f64)
+ (f64.add (f64.mul (local.get $$x) (local.get $$z)) (f64.mul (local.get $$y) (local.get $$z))))
+)`);
+
+// ./test/core/float_exprs.wast:260
+assert_return(
+ () => invoke($17, `f32.no_factor`, [
+ value("f32", -1435111700000),
+ value("f32", -853617640000000),
+ value("f32", 1113849300000000000),
+ ]),
+ [value("f32", -952399900000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:261
+assert_return(
+ () => invoke($17, `f32.no_factor`, [
+ value("f32", -0.026666632),
+ value("f32", 0.048412822),
+ value("f32", -0.002813697),
+ ]),
+ [value("f32", -0.0000611872)],
+);
+
+// ./test/core/float_exprs.wast:262
+assert_return(
+ () => invoke($17, `f32.no_factor`, [
+ value("f32", -0.00000000000046619777),
+ value("f32", 0.00000000000000000010478377),
+ value("f32", 14469202000000000000000000000000000000),
+ ]),
+ [value("f32", -6745508000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:263
+assert_return(
+ () => invoke($17, `f32.no_factor`, [
+ value("f32", -0.00000000000000000010689046),
+ value("f32", 0.00000000000000000000000010694433),
+ value("f32", 568307000000000000000000000000000000),
+ ]),
+ [value("f32", -60746540000000000)],
+);
+
+// ./test/core/float_exprs.wast:264
+assert_return(
+ () => invoke($17, `f32.no_factor`, [
+ value("f32", -0.000000000000000000000000063545994),
+ value("f32", 0.0000000000000000000007524625),
+ value("f32", 1626770.3),
+ ]),
+ [value("f32", 0.0000000000000012239803)],
+);
+
+// ./test/core/float_exprs.wast:265
+assert_return(
+ () => invoke($17, `f64.no_factor`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028390554709988774),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001473981250649641),
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000029001229846550766),
+ ]),
+ [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008233610026197336),
+ ],
+);
+
+// ./test/core/float_exprs.wast:266
+assert_return(
+ () => invoke($17, `f64.no_factor`, [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006461015505916123),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023923242802975938),
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015300738798561604),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:267
+assert_return(
+ () => invoke($17, `f64.no_factor`, [
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002939056292080733),
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000002146156743463356),
+ value("f64", -2510967223130241600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", 538892923853642600000000000000000000000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:268
+assert_return(
+ () => invoke($17, `f64.no_factor`, [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000017785466771708878),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000009328516775403213),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000012121009044876735),
+ ]),
+ [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001130710359943689),
+ ],
+);
+
+// ./test/core/float_exprs.wast:269
+assert_return(
+ () => invoke($17, `f64.no_factor`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015194859063177362),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000883589921438065),
+ value("f64", -1735830019469195800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", -0.0000000000000000000000000015337619131701908)],
+);
+
+// ./test/core/float_exprs.wast:273
+let $18 = instantiate(`(module
+ (func (export "f32.no_distribute") (param $$x f32) (param $$y f32) (param $$z f32) (result f32)
+ (f32.mul (f32.add (local.get $$x) (local.get $$y)) (local.get $$z)))
+ (func (export "f64.no_distribute") (param $$x f64) (param $$y f64) (param $$z f64) (result f64)
+ (f64.mul (f64.add (local.get $$x) (local.get $$y)) (local.get $$z)))
+)`);
+
+// ./test/core/float_exprs.wast:280
+assert_return(
+ () => invoke($18, `f32.no_distribute`, [
+ value("f32", -1435111700000),
+ value("f32", -853617640000000),
+ value("f32", 1113849300000000000),
+ ]),
+ [value("f32", -952400000000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:281
+assert_return(
+ () => invoke($18, `f32.no_distribute`, [
+ value("f32", -0.026666632),
+ value("f32", 0.048412822),
+ value("f32", -0.002813697),
+ ]),
+ [value("f32", -0.000061187195)],
+);
+
+// ./test/core/float_exprs.wast:282
+assert_return(
+ () => invoke($18, `f32.no_distribute`, [
+ value("f32", -0.00000000000046619777),
+ value("f32", 0.00000000000000000010478377),
+ value("f32", 14469202000000000000000000000000000000),
+ ]),
+ [value("f32", -6745508500000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:283
+assert_return(
+ () => invoke($18, `f32.no_distribute`, [
+ value("f32", -0.00000000000000000010689046),
+ value("f32", 0.00000000000000000000000010694433),
+ value("f32", 568307000000000000000000000000000000),
+ ]),
+ [value("f32", -60746536000000000)],
+);
+
+// ./test/core/float_exprs.wast:284
+assert_return(
+ () => invoke($18, `f32.no_distribute`, [
+ value("f32", -0.000000000000000000000000063545994),
+ value("f32", 0.0000000000000000000007524625),
+ value("f32", 1626770.3),
+ ]),
+ [value("f32", 0.0000000000000012239802)],
+);
+
+// ./test/core/float_exprs.wast:285
+assert_return(
+ () => invoke($18, `f64.no_distribute`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028390554709988774),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001473981250649641),
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000029001229846550766),
+ ]),
+ [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008233610026197337),
+ ],
+);
+
+// ./test/core/float_exprs.wast:286
+assert_return(
+ () => invoke($18, `f64.no_distribute`, [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006461015505916123),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023923242802975938),
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015300738798561604),
+ ]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:287
+assert_return(
+ () => invoke($18, `f64.no_distribute`, [
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002939056292080733),
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000002146156743463356),
+ value("f64", -2510967223130241600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", 538892923853642500000000000000000000000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:288
+assert_return(
+ () => invoke($18, `f64.no_distribute`, [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000017785466771708878),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000009328516775403213),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000012121009044876735),
+ ]),
+ [
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011307103599436889),
+ ],
+);
+
+// ./test/core/float_exprs.wast:289
+assert_return(
+ () => invoke($18, `f64.no_distribute`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015194859063177362),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000883589921438065),
+ value("f64", -1735830019469195800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", -0.0000000000000000000000000015337619131701907)],
+);
+
+// ./test/core/float_exprs.wast:293
+let $19 = instantiate(`(module
+ (func (export "f32.no_regroup_div_mul") (param $$x f32) (param $$y f32) (param $$z f32) (result f32)
+ (f32.mul (local.get $$x) (f32.div (local.get $$y) (local.get $$z))))
+ (func (export "f64.no_regroup_div_mul") (param $$x f64) (param $$y f64) (param $$z f64) (result f64)
+ (f64.mul (local.get $$x) (f64.div (local.get $$y) (local.get $$z))))
+)`);
+
+// ./test/core/float_exprs.wast:300
+assert_return(
+ () => invoke($19, `f32.no_regroup_div_mul`, [
+ value("f32", -0.00000000000000000000000000000000002831349),
+ value("f32", -0.00000000000000000007270787),
+ value("f32", 0.000000000000000000000000000000000016406605),
+ ]),
+ [value("f32", 0.00000000000000000012547468)],
+);
+
+// ./test/core/float_exprs.wast:301
+assert_return(
+ () => invoke($19, `f32.no_regroup_div_mul`, [
+ value("f32", -3145897700000000000000000000),
+ value("f32", -0.000000000000000000000000000000000040864003),
+ value("f32", -9245928300000000000000),
+ ]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:302
+assert_return(
+ () => invoke($19, `f32.no_regroup_div_mul`, [
+ value("f32", -93157.43),
+ value("f32", -0.00000081292654),
+ value("f32", -0.00000000000000000000000000000000000015469397),
+ ]),
+ [value("f32", -489548120000000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:303
+assert_return(
+ () => invoke($19, `f32.no_regroup_div_mul`, [
+ value("f32", -0.00000000000000000000000000008899643),
+ value("f32", 17887725000000000000000),
+ value("f32", 514680230000000000000),
+ ]),
+ [value("f32", -0.000000000000000000000000003093073)],
+);
+
+// ./test/core/float_exprs.wast:304
+assert_return(
+ () => invoke($19, `f32.no_regroup_div_mul`, [
+ value("f32", 9222036000000000000000000000000000),
+ value("f32", 33330492),
+ value("f32", -3253108800000000000000),
+ ]),
+ [value("f32", -94486550000000000000)],
+);
+
+// ./test/core/float_exprs.wast:305
+assert_return(
+ () => invoke($19, `f64.no_regroup_div_mul`, [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005698811412550059),
+ value("f64", -0.0000000000000000000000000000000000018313439132919336),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009543270551003098),
+ ]),
+ [value("f64", -1093596114413331000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:306
+assert_return(
+ () => invoke($19, `f64.no_regroup_div_mul`, [
+ value("f64", 357289288425507550000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003952760844538651),
+ value("f64", -1450781241254900800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:307
+assert_return(
+ () => invoke($19, `f64.no_regroup_div_mul`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009124278383497107),
+ value("f64", 55561345277147970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025090826940306507),
+ ]),
+ [value("f64", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:308
+assert_return(
+ () => invoke($19, `f64.no_regroup_div_mul`, [
+ value("f64", -4492093000352015000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -12087878984017852000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -596613380626062300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -91013507803376260000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:309
+assert_return(
+ () => invoke($19, `f64.no_regroup_div_mul`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007470269158630455),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007568026329781282),
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001055389683973521),
+ ]),
+ [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005356807494101561),
+ ],
+);
+
+// ./test/core/float_exprs.wast:313
+let $20 = instantiate(`(module
+ (func (export "f32.no_regroup_mul_div") (param $$x f32) (param $$y f32) (param $$z f32) (result f32)
+ (f32.div (f32.mul (local.get $$x) (local.get $$y)) (local.get $$z)))
+ (func (export "f64.no_regroup_mul_div") (param $$x f64) (param $$y f64) (param $$z f64) (result f64)
+ (f64.div (f64.mul (local.get $$x) (local.get $$y)) (local.get $$z)))
+)`);
+
+// ./test/core/float_exprs.wast:320
+assert_return(
+ () => invoke($20, `f32.no_regroup_mul_div`, [
+ value("f32", -0.00000000000000000000000000000000002831349),
+ value("f32", -0.00000000000000000007270787),
+ value("f32", 0.000000000000000000000000000000000016406605),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:321
+assert_return(
+ () => invoke($20, `f32.no_regroup_mul_div`, [
+ value("f32", -3145897700000000000000000000),
+ value("f32", -0.000000000000000000000000000000000040864003),
+ value("f32", -9245928300000000000000),
+ ]),
+ [value("f32", -0.000000000000000000000000000013903848)],
+);
+
+// ./test/core/float_exprs.wast:322
+assert_return(
+ () => invoke($20, `f32.no_regroup_mul_div`, [
+ value("f32", -93157.43),
+ value("f32", -0.00000081292654),
+ value("f32", -0.00000000000000000000000000000000000015469397),
+ ]),
+ [value("f32", -489548160000000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:323
+assert_return(
+ () => invoke($20, `f32.no_regroup_mul_div`, [
+ value("f32", -0.00000000000000000000000000008899643),
+ value("f32", 17887725000000000000000),
+ value("f32", 514680230000000000000),
+ ]),
+ [value("f32", -0.0000000000000000000000000030930732)],
+);
+
+// ./test/core/float_exprs.wast:324
+assert_return(
+ () => invoke($20, `f32.no_regroup_mul_div`, [
+ value("f32", 9222036000000000000000000000000000),
+ value("f32", 33330492),
+ value("f32", -3253108800000000000000),
+ ]),
+ [value("f32", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:325
+assert_return(
+ () => invoke($20, `f64.no_regroup_mul_div`, [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005698811412550059),
+ value("f64", -0.0000000000000000000000000000000000018313439132919336),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009543270551003098),
+ ]),
+ [value("f64", -1093596114413331100000000000000)],
+);
+
+// ./test/core/float_exprs.wast:326
+assert_return(
+ () => invoke($20, `f64.no_regroup_mul_div`, [
+ value("f64", 357289288425507550000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003952760844538651),
+ value("f64", -1450781241254900800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009734611044734945),
+ ],
+);
+
+// ./test/core/float_exprs.wast:327
+assert_return(
+ () => invoke($20, `f64.no_regroup_mul_div`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009124278383497107),
+ value("f64", 55561345277147970000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025090826940306507),
+ ]),
+ [
+ value("f64", 20204881364667663000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:328
+assert_return(
+ () => invoke($20, `f64.no_regroup_mul_div`, [
+ value("f64", -4492093000352015000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -12087878984017852000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -596613380626062300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:329
+assert_return(
+ () => invoke($20, `f64.no_regroup_mul_div`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007470269158630455),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007568026329781282),
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001055389683973521),
+ ]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:333
+let $21 = instantiate(`(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 (local.get $$x) (local.get $$y)) (local.get $$z)) (local.get $$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 (local.get $$x) (local.get $$y)) (local.get $$z)) (local.get $$w)))
+)`);
+
+// ./test/core/float_exprs.wast:340
+assert_return(
+ () => invoke($21, `f32.no_reassociate_add`, [
+ value("f32", -24154321000000),
+ value("f32", 26125812000),
+ value("f32", -238608080000000),
+ value("f32", -2478953500000),
+ ]),
+ [value("f32", -265215220000000)],
+);
+
+// ./test/core/float_exprs.wast:341
+assert_return(
+ () => invoke($21, `f32.no_reassociate_add`, [
+ value("f32", 0.0036181053),
+ value("f32", -0.00985944),
+ value("f32", 0.063375376),
+ value("f32", -0.011150199),
+ ]),
+ [value("f32", 0.04598384)],
+);
+
+// ./test/core/float_exprs.wast:342
+assert_return(
+ () => invoke($21, `f32.no_reassociate_add`, [
+ value("f32", -34206968000),
+ value("f32", -3770877200000),
+ value("f32", 30868425000000),
+ value("f32", 421132080000),
+ ]),
+ [value("f32", 27484470000000)],
+);
+
+// ./test/core/float_exprs.wast:343
+assert_return(
+ () => invoke($21, `f32.no_reassociate_add`, [
+ value("f32", 153506400000000),
+ value("f32", 925114700000000),
+ value("f32", -36021854000),
+ value("f32", 2450846000000000),
+ ]),
+ [value("f32", 3529431000000000)],
+);
+
+// ./test/core/float_exprs.wast:344
+assert_return(
+ () => invoke($21, `f32.no_reassociate_add`, [
+ value("f32", 470600300000000000000000000000000),
+ value("f32", -396552040000000000000000000000000),
+ value("f32", 48066940000000000000000000000000),
+ value("f32", -35644073000000000000000000000),
+ ]),
+ [value("f32", 122079560000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:345
+assert_return(
+ () => invoke($21, `f64.no_reassociate_add`, [
+ value("f64", -20704652927717020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 1594689704376369700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 451106636559416130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -1374333509186863300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -921652887575998600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:346
+assert_return(
+ () => invoke($21, `f64.no_reassociate_add`, [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003485747658213531),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031210957391311754),
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000683008546431621),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002617177347131095),
+ ]),
+ [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022324206697150536),
+ ],
+);
+
+// ./test/core/float_exprs.wast:347
+assert_return(
+ () => invoke($21, `f64.no_reassociate_add`, [
+ value("f64", -5412584921122726300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 597603656170379500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -355830077793396300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 373627259957625440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -5768414998318146000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:348
+assert_return(
+ () => invoke($21, `f64.no_reassociate_add`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006469047714189599),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064286584974746),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000021277698072285604),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000008768287273189493),
+ ]),
+ [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000006640517465960996),
+ ],
+);
+
+// ./test/core/float_exprs.wast:349
+assert_return(
+ () => invoke($21, `f64.no_reassociate_add`, [
+ value("f64", -16422137086414828000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -88032137939790710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 449957059782857850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -114091267166274390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 319443655442136560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:353
+let $22 = instantiate(`(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 (local.get $$x) (local.get $$y)) (local.get $$z)) (local.get $$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 (local.get $$x) (local.get $$y)) (local.get $$z)) (local.get $$w)))
+)`);
+
+// ./test/core/float_exprs.wast:360
+assert_return(
+ () => invoke($22, `f32.no_reassociate_mul`, [
+ value("f32", 0.00000000000000000000000000000000001904515),
+ value("f32", 0.00000000022548861),
+ value("f32", -6964322000000000000000000000000),
+ value("f32", 0.000000000000000026902832),
+ ]),
+ [value("f32", -0.00000000000000000000000000000078764173)],
+);
+
+// ./test/core/float_exprs.wast:361
+assert_return(
+ () => invoke($22, `f32.no_reassociate_mul`, [
+ value("f32", 0.000000000000000018733125),
+ value("f32", -7565904000000000000000000000000),
+ value("f32", -0.000000000000000000000000000000000000030807684),
+ value("f32", -1592759200000000000000),
+ ]),
+ [value("f32", -0.0069547286)],
+);
+
+// ./test/core/float_exprs.wast:362
+assert_return(
+ () => invoke($22, `f32.no_reassociate_mul`, [
+ value("f32", 0.0000000000000050355575),
+ value("f32", -56466884000000000),
+ value("f32", -0.0000000000011740512),
+ value("f32", 84984730000000000000000),
+ ]),
+ [value("f32", 28370654000000)],
+);
+
+// ./test/core/float_exprs.wast:363
+assert_return(
+ () => invoke($22, `f32.no_reassociate_mul`, [
+ value("f32", 0.000000000000000000000000000000046394946),
+ value("f32", 254449360000000000000000),
+ value("f32", -72460980000000000),
+ value("f32", -962511040000000000),
+ ]),
+ [value("f32", 823345100000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:364
+assert_return(
+ () => invoke($22, `f32.no_reassociate_mul`, [
+ value("f32", -0.0000000000000000000000000000019420536),
+ value("f32", 0.0000000000000023200355),
+ value("f32", -9.772748),
+ value("f32", 864066000000000000),
+ ]),
+ [value("f32", 0.000000000000000000000000035113616)],
+);
+
+// ./test/core/float_exprs.wast:365
+assert_return(
+ () => invoke($22, `f64.no_reassociate_mul`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003109868654414946),
+ value("f64", -20713190487745434000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007162612845524978),
+ value("f64", -88478253295969090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 40822261813278614000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:366
+assert_return(
+ () => invoke($22, `f64.no_reassociate_mul`, [
+ value("f64", 60442716412956810000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006700545015107397),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031469664275798185),
+ value("f64", -6401677295640561500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008159057447560471),
+ ],
+);
+
+// ./test/core/float_exprs.wast:367
+assert_return(
+ () => invoke($22, `f64.no_reassociate_mul`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002216807720454268),
+ value("f64", -1802234186536721600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007500283778521931),
+ value("f64", -414412152433956900000000000),
+ ]),
+ [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001241793627299937),
+ ],
+);
+
+// ./test/core/float_exprs.wast:368
+assert_return(
+ () => invoke($22, `f64.no_reassociate_mul`, [
+ value("f64", 24318065966298720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006508014075793436),
+ value("f64", 17596421287233897000000000000000000000000000000000000000000000000000),
+ value("f64", -0.0000001416141401305358),
+ ]),
+ [
+ value("f64", -3943741918531223000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:369
+assert_return(
+ () => invoke($22, `f64.no_reassociate_mul`, [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000003849767156964772),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070008754943224875),
+ value("f64", -2536887825218386500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101114518858449),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004171548126376117),
+ ],
+);
+
+// ./test/core/float_exprs.wast:373
+let $23 = instantiate(`(module
+ (func (export "f32.no_fold_div_0") (param $$x f32) (result f32)
+ (f32.div (local.get $$x) (f32.const 0.0)))
+ (func (export "f64.no_fold_div_0") (param $$x f64) (result f64)
+ (f64.div (local.get $$x) (f64.const 0.0)))
+)`);
+
+// ./test/core/float_exprs.wast:380
+assert_return(() => invoke($23, `f32.no_fold_div_0`, [value("f32", 1)]), [value("f32", Infinity)]);
+
+// ./test/core/float_exprs.wast:381
+assert_return(() => invoke($23, `f32.no_fold_div_0`, [value("f32", -1)]), [value("f32", -Infinity)]);
+
+// ./test/core/float_exprs.wast:382
+assert_return(
+ () => invoke($23, `f32.no_fold_div_0`, [value("f32", Infinity)]),
+ [value("f32", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:383
+assert_return(
+ () => invoke($23, `f32.no_fold_div_0`, [value("f32", -Infinity)]),
+ [value("f32", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:384
+assert_return(() => invoke($23, `f32.no_fold_div_0`, [value("f32", 0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:385
+assert_return(() => invoke($23, `f32.no_fold_div_0`, [value("f32", -0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:386
+assert_return(
+ () => invoke($23, `f32.no_fold_div_0`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:387
+assert_return(
+ () => invoke($23, `f32.no_fold_div_0`, [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:388
+assert_return(() => invoke($23, `f64.no_fold_div_0`, [value("f64", 1)]), [value("f64", Infinity)]);
+
+// ./test/core/float_exprs.wast:389
+assert_return(() => invoke($23, `f64.no_fold_div_0`, [value("f64", -1)]), [value("f64", -Infinity)]);
+
+// ./test/core/float_exprs.wast:390
+assert_return(
+ () => invoke($23, `f64.no_fold_div_0`, [value("f64", Infinity)]),
+ [value("f64", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:391
+assert_return(
+ () => invoke($23, `f64.no_fold_div_0`, [value("f64", -Infinity)]),
+ [value("f64", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:392
+assert_return(() => invoke($23, `f64.no_fold_div_0`, [value("f64", 0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:393
+assert_return(() => invoke($23, `f64.no_fold_div_0`, [value("f64", -0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:394
+assert_return(
+ () => invoke($23, `f64.no_fold_div_0`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:395
+assert_return(
+ () => invoke($23, `f64.no_fold_div_0`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:399
+let $24 = instantiate(`(module
+ (func (export "f32.no_fold_div_neg0") (param $$x f32) (result f32)
+ (f32.div (local.get $$x) (f32.const -0.0)))
+ (func (export "f64.no_fold_div_neg0") (param $$x f64) (result f64)
+ (f64.div (local.get $$x) (f64.const -0.0)))
+)`);
+
+// ./test/core/float_exprs.wast:406
+assert_return(() => invoke($24, `f32.no_fold_div_neg0`, [value("f32", 1)]), [value("f32", -Infinity)]);
+
+// ./test/core/float_exprs.wast:407
+assert_return(() => invoke($24, `f32.no_fold_div_neg0`, [value("f32", -1)]), [value("f32", Infinity)]);
+
+// ./test/core/float_exprs.wast:408
+assert_return(
+ () => invoke($24, `f32.no_fold_div_neg0`, [value("f32", Infinity)]),
+ [value("f32", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:409
+assert_return(
+ () => invoke($24, `f32.no_fold_div_neg0`, [value("f32", -Infinity)]),
+ [value("f32", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:410
+assert_return(() => invoke($24, `f32.no_fold_div_neg0`, [value("f32", 0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:411
+assert_return(() => invoke($24, `f32.no_fold_div_neg0`, [value("f32", -0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:412
+assert_return(
+ () => invoke($24, `f32.no_fold_div_neg0`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:413
+assert_return(
+ () => invoke($24, `f32.no_fold_div_neg0`, [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:414
+assert_return(() => invoke($24, `f64.no_fold_div_neg0`, [value("f64", 1)]), [value("f64", -Infinity)]);
+
+// ./test/core/float_exprs.wast:415
+assert_return(() => invoke($24, `f64.no_fold_div_neg0`, [value("f64", -1)]), [value("f64", Infinity)]);
+
+// ./test/core/float_exprs.wast:416
+assert_return(
+ () => invoke($24, `f64.no_fold_div_neg0`, [value("f64", Infinity)]),
+ [value("f64", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:417
+assert_return(
+ () => invoke($24, `f64.no_fold_div_neg0`, [value("f64", -Infinity)]),
+ [value("f64", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:418
+assert_return(() => invoke($24, `f64.no_fold_div_neg0`, [value("f64", 0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:419
+assert_return(() => invoke($24, `f64.no_fold_div_neg0`, [value("f64", -0)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:420
+assert_return(
+ () => invoke($24, `f64.no_fold_div_neg0`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:421
+assert_return(
+ () => invoke($24, `f64.no_fold_div_neg0`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:425
+let $25 = instantiate(`(module
+ (func (export "f32.no_fold_to_hypot") (param $$x f32) (param $$y f32) (result f32)
+ (f32.sqrt (f32.add (f32.mul (local.get $$x) (local.get $$x))
+ (f32.mul (local.get $$y) (local.get $$y)))))
+ (func (export "f64.no_fold_to_hypot") (param $$x f64) (param $$y f64) (result f64)
+ (f64.sqrt (f64.add (f64.mul (local.get $$x) (local.get $$x))
+ (f64.mul (local.get $$y) (local.get $$y)))))
+)`);
+
+// ./test/core/float_exprs.wast:434
+assert_return(
+ () => invoke($25, `f32.no_fold_to_hypot`, [
+ value("f32", 0.00000000000000000000000072854914),
+ value("f32", 0.0000000000000000000042365796),
+ ]),
+ [value("f32", 0.0000000000000000000042366535)],
+);
+
+// ./test/core/float_exprs.wast:435
+assert_return(
+ () => invoke($25, `f32.no_fold_to_hypot`, [
+ value("f32", -0.0000000000000000000007470285),
+ value("f32", -0.000000000000000000000000000000007453745),
+ ]),
+ [value("f32", 0.0000000000000000000007468044)],
+);
+
+// ./test/core/float_exprs.wast:436
+assert_return(
+ () => invoke($25, `f32.no_fold_to_hypot`, [
+ value("f32", -0.0000000000000000000000000000000000770895),
+ value("f32", -0.0000000000000000000032627214),
+ ]),
+ [value("f32", 0.0000000000000000000032627695)],
+);
+
+// ./test/core/float_exprs.wast:437
+assert_return(
+ () => invoke($25, `f32.no_fold_to_hypot`, [
+ value("f32", -35.42818),
+ value("f32", 174209.48),
+ ]),
+ [value("f32", 174209.5)],
+);
+
+// ./test/core/float_exprs.wast:438
+assert_return(
+ () => invoke($25, `f32.no_fold_to_hypot`, [
+ value("f32", 0.000000000000000000000020628143),
+ value("f32", -0.00000000000000000000046344753),
+ ]),
+ [value("f32", 0.000000000000000000000463032)],
+);
+
+// ./test/core/float_exprs.wast:439
+assert_return(
+ () => invoke($25, `f64.no_fold_to_hypot`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003863640258986321),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019133014752624014),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019120893753235554),
+ ],
+);
+
+// ./test/core/float_exprs.wast:440
+assert_return(
+ () => invoke($25, `f64.no_fold_to_hypot`, [
+ value("f64", 138561238950329770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -2828038515930043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 2828038519324483400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:441
+assert_return(
+ () => invoke($25, `f64.no_fold_to_hypot`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006502729096641792),
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004544399933151275),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006668276248455232),
+ ],
+);
+
+// ./test/core/float_exprs.wast:442
+assert_return(
+ () => invoke($25, `f64.no_fold_to_hypot`, [
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022340232024202604),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003435929714143315),
+ ]),
+ [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022340232023799234),
+ ],
+);
+
+// ./test/core/float_exprs.wast:443
+assert_return(
+ () => invoke($25, `f64.no_fold_to_hypot`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002797963998630554),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001906867996862016),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019068679968620105),
+ ],
+);
+
+// ./test/core/float_exprs.wast:447
+let $26 = instantiate(`(module
+ (func (export "f32.no_approximate_reciprocal") (param $$x f32) (result f32)
+ (f32.div (f32.const 1.0) (local.get $$x)))
+)`);
+
+// ./test/core/float_exprs.wast:452
+assert_return(
+ () => invoke($26, `f32.no_approximate_reciprocal`, [value("f32", -0.0011329757)]),
+ [value("f32", -882.6315)],
+);
+
+// ./test/core/float_exprs.wast:453
+assert_return(
+ () => invoke($26, `f32.no_approximate_reciprocal`, [
+ value("f32", 323753010000000000000000000000000000000),
+ ]),
+ [value("f32", 0.000000000000000000000000000000000000003088774)],
+);
+
+// ./test/core/float_exprs.wast:454
+assert_return(
+ () => invoke($26, `f32.no_approximate_reciprocal`, [
+ value("f32", -0.0000000000000000000000000001272599),
+ ]),
+ [value("f32", -7857934600000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:455
+assert_return(
+ () => invoke($26, `f32.no_approximate_reciprocal`, [
+ value("f32", 103020680000000000000000),
+ ]),
+ [value("f32", 0.000000000000000000000009706789)],
+);
+
+// ./test/core/float_exprs.wast:456
+assert_return(
+ () => invoke($26, `f32.no_approximate_reciprocal`, [
+ value("f32", -0.00000000000000000000000028443763),
+ ]),
+ [value("f32", -3515709300000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:460
+let $27 = instantiate(`(module
+ (func (export "f32.no_approximate_reciprocal_sqrt") (param $$x f32) (result f32)
+ (f32.div (f32.const 1.0) (f32.sqrt (local.get $$x))))
+ (func (export "f64.no_fuse_reciprocal_sqrt") (param $$x f64) (result f64)
+ (f64.div (f64.const 1.0) (f64.sqrt (local.get $$x))))
+)`);
+
+// ./test/core/float_exprs.wast:467
+assert_return(
+ () => invoke($27, `f32.no_approximate_reciprocal_sqrt`, [
+ value("f32", 0.00000000000016117865),
+ ]),
+ [value("f32", 2490842.5)],
+);
+
+// ./test/core/float_exprs.wast:468
+assert_return(
+ () => invoke($27, `f32.no_approximate_reciprocal_sqrt`, [value("f32", 0.0074491366)]),
+ [value("f32", 11.58636)],
+);
+
+// ./test/core/float_exprs.wast:469
+assert_return(
+ () => invoke($27, `f32.no_approximate_reciprocal_sqrt`, [
+ value("f32", 0.00000000000000000002339817),
+ ]),
+ [value("f32", 6537460000)],
+);
+
+// ./test/core/float_exprs.wast:470
+assert_return(
+ () => invoke($27, `f32.no_approximate_reciprocal_sqrt`, [
+ value("f32", 0.00000000000011123504),
+ ]),
+ [value("f32", 2998328.3)],
+);
+
+// ./test/core/float_exprs.wast:471
+assert_return(
+ () => invoke($27, `f32.no_approximate_reciprocal_sqrt`, [
+ value("f32", 0.000000000000000000000000017653063),
+ ]),
+ [value("f32", 7526446300000)],
+);
+
+// ./test/core/float_exprs.wast:473
+assert_return(
+ () => invoke($27, `f64.no_fuse_reciprocal_sqrt`, [
+ value("f64", 4472459252766337000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014952947335898096),
+ ],
+);
+
+// ./test/core/float_exprs.wast:474
+assert_return(
+ () => invoke($27, `f64.no_fuse_reciprocal_sqrt`, [
+ value("f64", 4752392260007119000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000014505872638954843),
+ ],
+);
+
+// ./test/core/float_exprs.wast:475
+assert_return(
+ () => invoke($27, `f64.no_fuse_reciprocal_sqrt`, [
+ value("f64", 29014415885392436000000000000000),
+ ]),
+ [value("f64", 0.00000000000000018564920084793608)],
+);
+
+// ./test/core/float_exprs.wast:476
+assert_return(
+ () => invoke($27, `f64.no_fuse_reciprocal_sqrt`, [
+ value("f64", 1396612507697477800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026758516751072132),
+ ],
+);
+
+// ./test/core/float_exprs.wast:477
+assert_return(
+ () => invoke($27, `f64.no_fuse_reciprocal_sqrt`, [
+ value("f64", 151596415440704430000000000000000000000000000),
+ ]),
+ [value("f64", 0.00000000000000000000008121860649480894)],
+);
+
+// ./test/core/float_exprs.wast:481
+let $28 = instantiate(`(module
+ (func (export "f32.no_approximate_sqrt_reciprocal") (param $$x f32) (result f32)
+ (f32.sqrt (f32.div (f32.const 1.0) (local.get $$x))))
+)`);
+
+// ./test/core/float_exprs.wast:486
+assert_return(
+ () => invoke($28, `f32.no_approximate_sqrt_reciprocal`, [
+ value("f32", 1895057100000000000),
+ ]),
+ [value("f32", 0.00000000072642176)],
+);
+
+// ./test/core/float_exprs.wast:487
+assert_return(
+ () => invoke($28, `f32.no_approximate_sqrt_reciprocal`, [value("f32", 0.002565894)]),
+ [value("f32", 19.741522)],
+);
+
+// ./test/core/float_exprs.wast:488
+assert_return(
+ () => invoke($28, `f32.no_approximate_sqrt_reciprocal`, [
+ value("f32", 632654500000000000000),
+ ]),
+ [value("f32", 0.000000000039757284)],
+);
+
+// ./test/core/float_exprs.wast:489
+assert_return(
+ () => invoke($28, `f32.no_approximate_sqrt_reciprocal`, [value("f32", 14153.539)]),
+ [value("f32", 0.008405576)],
+);
+
+// ./test/core/float_exprs.wast:490
+assert_return(
+ () => invoke($28, `f32.no_approximate_sqrt_reciprocal`, [
+ value("f32", 26173730000000000000000000000000),
+ ]),
+ [value("f32", 0.00000000000000019546418)],
+);
+
+// ./test/core/float_exprs.wast:494
+let $29 = instantiate(`(module
+ (func (export "i32.no_fold_f32_s") (param i32) (result i32)
+ (i32.trunc_f32_s (f32.convert_i32_s (local.get 0))))
+ (func (export "i32.no_fold_f32_u") (param i32) (result i32)
+ (i32.trunc_f32_u (f32.convert_i32_u (local.get 0))))
+ (func (export "i64.no_fold_f64_s") (param i64) (result i64)
+ (i64.trunc_f64_s (f64.convert_i64_s (local.get 0))))
+ (func (export "i64.no_fold_f64_u") (param i64) (result i64)
+ (i64.trunc_f64_u (f64.convert_i64_u (local.get 0))))
+)`);
+
+// ./test/core/float_exprs.wast:505
+assert_return(() => invoke($29, `i32.no_fold_f32_s`, [16777216]), [value("i32", 16777216)]);
+
+// ./test/core/float_exprs.wast:506
+assert_return(() => invoke($29, `i32.no_fold_f32_s`, [16777217]), [value("i32", 16777216)]);
+
+// ./test/core/float_exprs.wast:507
+assert_return(() => invoke($29, `i32.no_fold_f32_s`, [-268435440]), [value("i32", -268435440)]);
+
+// ./test/core/float_exprs.wast:509
+assert_return(() => invoke($29, `i32.no_fold_f32_u`, [16777216]), [value("i32", 16777216)]);
+
+// ./test/core/float_exprs.wast:510
+assert_return(() => invoke($29, `i32.no_fold_f32_u`, [16777217]), [value("i32", 16777216)]);
+
+// ./test/core/float_exprs.wast:511
+assert_return(() => invoke($29, `i32.no_fold_f32_u`, [-268435440]), [value("i32", -268435456)]);
+
+// ./test/core/float_exprs.wast:513
+assert_return(
+ () => invoke($29, `i64.no_fold_f64_s`, [9007199254740992n]),
+ [value("i64", 9007199254740992n)],
+);
+
+// ./test/core/float_exprs.wast:514
+assert_return(
+ () => invoke($29, `i64.no_fold_f64_s`, [9007199254740993n]),
+ [value("i64", 9007199254740992n)],
+);
+
+// ./test/core/float_exprs.wast:515
+assert_return(
+ () => invoke($29, `i64.no_fold_f64_s`, [-1152921504606845952n]),
+ [value("i64", -1152921504606845952n)],
+);
+
+// ./test/core/float_exprs.wast:517
+assert_return(
+ () => invoke($29, `i64.no_fold_f64_u`, [9007199254740992n]),
+ [value("i64", 9007199254740992n)],
+);
+
+// ./test/core/float_exprs.wast:518
+assert_return(
+ () => invoke($29, `i64.no_fold_f64_u`, [9007199254740993n]),
+ [value("i64", 9007199254740992n)],
+);
+
+// ./test/core/float_exprs.wast:519
+assert_return(
+ () => invoke($29, `i64.no_fold_f64_u`, [-1152921504606845952n]),
+ [value("i64", -1152921504606846976n)],
+);
+
+// ./test/core/float_exprs.wast:523
+let $30 = instantiate(`(module
+ (func (export "f32.no_fold_add_sub") (param $$x f32) (param $$y f32) (result f32)
+ (f32.sub (f32.add (local.get $$x) (local.get $$y)) (local.get $$y)))
+ (func (export "f64.no_fold_add_sub") (param $$x f64) (param $$y f64) (result f64)
+ (f64.sub (f64.add (local.get $$x) (local.get $$y)) (local.get $$y)))
+)`);
+
+// ./test/core/float_exprs.wast:530
+assert_return(
+ () => invoke($30, `f32.no_fold_add_sub`, [
+ value("f32", 0.000000000000012138282),
+ value("f32", -0.000000020946384),
+ ]),
+ [value("f32", 0.000000000000012434498)],
+);
+
+// ./test/core/float_exprs.wast:531
+assert_return(
+ () => invoke($30, `f32.no_fold_add_sub`, [
+ value("f32", -0.00000019768197),
+ value("f32", 0.0000037154566),
+ ]),
+ [value("f32", -0.00000019768208)],
+);
+
+// ./test/core/float_exprs.wast:532
+assert_return(
+ () => invoke($30, `f32.no_fold_add_sub`, [
+ value("f32", -9596213000000000000000000),
+ value("f32", -3538041400000000000000000000000),
+ ]),
+ [value("f32", -9671407000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:533
+assert_return(
+ () => invoke($30, `f32.no_fold_add_sub`, [
+ value("f32", 0.000000000000000000000005054346),
+ value("f32", 0.000000000000000024572656),
+ ]),
+ [value("f32", 0.0000000000000000000000049630837)],
+);
+
+// ./test/core/float_exprs.wast:534
+assert_return(
+ () => invoke($30, `f32.no_fold_add_sub`, [
+ value("f32", -0.0000000000000000000000000000000033693147),
+ value("f32", -0.000000000000000000000000071014917),
+ ]),
+ [value("f32", -0.000000000000000000000000000000006162976)],
+);
+
+// ./test/core/float_exprs.wast:536
+assert_return(
+ () => invoke($30, `f64.no_fold_add_sub`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008445702651973109),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110684389828854),
+ ]),
+ [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008445702651873978),
+ ],
+);
+
+// ./test/core/float_exprs.wast:537
+assert_return(
+ () => invoke($30, `f64.no_fold_add_sub`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008198798715927055),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004624035606110903),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008198798715897085),
+ ],
+);
+
+// ./test/core/float_exprs.wast:538
+assert_return(
+ () => invoke($30, `f64.no_fold_add_sub`, [
+ value("f64", -0.0000000013604511322066714),
+ value("f64", -0.1751431740707098),
+ ]),
+ [value("f64", -0.0000000013604511406306585)],
+);
+
+// ./test/core/float_exprs.wast:539
+assert_return(
+ () => invoke($30, `f64.no_fold_add_sub`, [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003944335437865966),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001663809741322667),
+ ]),
+ [
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039443355500325104),
+ ],
+);
+
+// ./test/core/float_exprs.wast:540
+assert_return(
+ () => invoke($30, `f64.no_fold_add_sub`, [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005078309818866),
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010790431644461104),
+ ]),
+ [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000507831047937567),
+ ],
+);
+
+// ./test/core/float_exprs.wast:544
+let $31 = instantiate(`(module
+ (func (export "f32.no_fold_sub_add") (param $$x f32) (param $$y f32) (result f32)
+ (f32.add (f32.sub (local.get $$x) (local.get $$y)) (local.get $$y)))
+ (func (export "f64.no_fold_sub_add") (param $$x f64) (param $$y f64) (result f64)
+ (f64.add (f64.sub (local.get $$x) (local.get $$y)) (local.get $$y)))
+)`);
+
+// ./test/core/float_exprs.wast:551
+assert_return(
+ () => invoke($31, `f32.no_fold_sub_add`, [
+ value("f32", -676.47437),
+ value("f32", 403.0368),
+ ]),
+ [value("f32", -676.4744)],
+);
+
+// ./test/core/float_exprs.wast:552
+assert_return(
+ () => invoke($31, `f32.no_fold_sub_add`, [
+ value("f32", -0.0000000000000000000000000000000006305943),
+ value("f32", 0.0000000000000000000000000000367186),
+ ]),
+ [value("f32", -0.00000000000000000000000000000000063194576)],
+);
+
+// ./test/core/float_exprs.wast:553
+assert_return(
+ () => invoke($31, `f32.no_fold_sub_add`, [
+ value("f32", 83184800),
+ value("f32", 46216217000),
+ ]),
+ [value("f32", 83185660)],
+);
+
+// ./test/core/float_exprs.wast:554
+assert_return(
+ () => invoke($31, `f32.no_fold_sub_add`, [
+ value("f32", 0.000000000002211957),
+ value("f32", -0.00000001043793),
+ ]),
+ [value("f32", 0.0000000000022115643)],
+);
+
+// ./test/core/float_exprs.wast:555
+assert_return(
+ () => invoke($31, `f32.no_fold_sub_add`, [
+ value("f32", 0.14944395),
+ value("f32", -27393.65),
+ ]),
+ [value("f32", 0.15039063)],
+);
+
+// ./test/core/float_exprs.wast:557
+assert_return(
+ () => invoke($31, `f64.no_fold_sub_add`, [
+ value("f64", 90365982617946240000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -958186427535552000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 90365982617946280000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:558
+assert_return(
+ () => invoke($31, `f64.no_fold_sub_add`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044230403564658815),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026713491049366576),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004423040356647721),
+ ],
+);
+
+// ./test/core/float_exprs.wast:559
+assert_return(
+ () => invoke($31, `f64.no_fold_sub_add`, [
+ value("f64", 4095348452776429000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -4050190019576568700000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 4070815637249397500000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:560
+assert_return(
+ () => invoke($31, `f64.no_fold_sub_add`, [
+ value("f64", 0.000000024008889207554433),
+ value("f64", -0.00017253797929188484),
+ ]),
+ [value("f64", 0.00000002400888920756506)],
+);
+
+// ./test/core/float_exprs.wast:561
+assert_return(
+ () => invoke($31, `f64.no_fold_sub_add`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043367542918305866),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039597706708227122),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004336754291830597),
+ ],
+);
+
+// ./test/core/float_exprs.wast:565
+let $32 = instantiate(`(module
+ (func (export "f32.no_fold_mul_div") (param $$x f32) (param $$y f32) (result f32)
+ (f32.div (f32.mul (local.get $$x) (local.get $$y)) (local.get $$y)))
+ (func (export "f64.no_fold_mul_div") (param $$x f64) (param $$y f64) (result f64)
+ (f64.div (f64.mul (local.get $$x) (local.get $$y)) (local.get $$y)))
+)`);
+
+// ./test/core/float_exprs.wast:572
+assert_return(
+ () => invoke($32, `f32.no_fold_mul_div`, [
+ value("f32", -32476715000000000),
+ value("f32", 0.000000000000010121375),
+ ]),
+ [value("f32", -32476713000000000)],
+);
+
+// ./test/core/float_exprs.wast:573
+assert_return(
+ () => invoke($32, `f32.no_fold_mul_div`, [
+ value("f32", -0.000000015561163),
+ value("f32", 0.000000000000000000000000000000015799828),
+ ]),
+ [value("f32", -0.000000015561145)],
+);
+
+// ./test/core/float_exprs.wast:574
+assert_return(
+ () => invoke($32, `f32.no_fold_mul_div`, [
+ value("f32", -0.00000000000000676311),
+ value("f32", -441324000000000),
+ ]),
+ [value("f32", -0.0000000000000067631096)],
+);
+
+// ./test/core/float_exprs.wast:575
+assert_return(
+ () => invoke($32, `f32.no_fold_mul_div`, [
+ value("f32", 7505613700000000),
+ value("f32", -2160384100000000000),
+ ]),
+ [value("f32", 7505613000000000)],
+);
+
+// ./test/core/float_exprs.wast:576
+assert_return(
+ () => invoke($32, `f32.no_fold_mul_div`, [
+ value("f32", -0.0000000000000000000000000002362576),
+ value("f32", -0.000000000010808759),
+ ]),
+ [value("f32", -0.00000000000000000000000000023625765)],
+);
+
+// ./test/core/float_exprs.wast:578
+assert_return(
+ () => invoke($32, `f64.no_fold_mul_div`, [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013532103713575586),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000003347836467564916),
+ ]),
+ [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013532103713672434),
+ ],
+);
+
+// ./test/core/float_exprs.wast:579
+assert_return(
+ () => invoke($32, `f64.no_fold_mul_div`, [
+ value("f64", 77662174313180845000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 195959155606939530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 77662174313180850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:580
+assert_return(
+ () => invoke($32, `f64.no_fold_mul_div`, [
+ value("f64", -718011781190294800000000000000000000000000000000000000000000000000000000),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009320036042623636),
+ ]),
+ [
+ value("f64", -718011781190294750000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:581
+assert_return(
+ () => invoke($32, `f64.no_fold_mul_div`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000017260010724693063),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003568792428129926),
+ ]),
+ [
+ value("f64", 0.00000000000000000000000000000000000000000000000001661286799244216),
+ ],
+);
+
+// ./test/core/float_exprs.wast:582
+assert_return(
+ () => invoke($32, `f64.no_fold_mul_div`, [
+ value("f64", -9145223045828962000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005562094034342845),
+ ]),
+ [
+ value("f64", -9145223045828963000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:586
+let $33 = instantiate(`(module
+ (func (export "f32.no_fold_div_mul") (param $$x f32) (param $$y f32) (result f32)
+ (f32.mul (f32.div (local.get $$x) (local.get $$y)) (local.get $$y)))
+ (func (export "f64.no_fold_div_mul") (param $$x f64) (param $$y f64) (result f64)
+ (f64.mul (f64.div (local.get $$x) (local.get $$y)) (local.get $$y)))
+)`);
+
+// ./test/core/float_exprs.wast:593
+assert_return(
+ () => invoke($33, `f32.no_fold_div_mul`, [
+ value("f32", -511517980000),
+ value("f32", 986062200),
+ ]),
+ [value("f32", -511517950000)],
+);
+
+// ./test/core/float_exprs.wast:594
+assert_return(
+ () => invoke($33, `f32.no_fold_div_mul`, [
+ value("f32", -0.00000000000000024944853),
+ value("f32", -0.0000041539834),
+ ]),
+ [value("f32", -0.00000000000000024944856)],
+);
+
+// ./test/core/float_exprs.wast:595
+assert_return(
+ () => invoke($33, `f32.no_fold_div_mul`, [
+ value("f32", 0.000000000000000000000000000000000000020827855),
+ value("f32", -235.19847),
+ ]),
+ [value("f32", 0.000000000000000000000000000000000000020828013)],
+);
+
+// ./test/core/float_exprs.wast:596
+assert_return(
+ () => invoke($33, `f32.no_fold_div_mul`, [
+ value("f32", -0.000000000000000000000062499487),
+ value("f32", -696312600000000000),
+ ]),
+ [value("f32", -0.00000000000000000000006249919)],
+);
+
+// ./test/core/float_exprs.wast:597
+assert_return(
+ () => invoke($33, `f32.no_fold_div_mul`, [
+ value("f32", 0.0000000000000000000000000000058353514),
+ value("f32", 212781120),
+ ]),
+ [value("f32", 0.000000000000000000000000000005835352)],
+);
+
+// ./test/core/float_exprs.wast:599
+assert_return(
+ () => invoke($33, `f64.no_fold_div_mul`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035984644259935362),
+ value("f64", -28812263298033320000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035985034356565485),
+ ],
+);
+
+// ./test/core/float_exprs.wast:600
+assert_return(
+ () => invoke($33, `f64.no_fold_div_mul`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017486367047479447),
+ value("f64", 0.00000000000000016508738454798636),
+ ]),
+ [
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001748636704747945),
+ ],
+);
+
+// ./test/core/float_exprs.wast:601
+assert_return(
+ () => invoke($33, `f64.no_fold_div_mul`, [
+ value("f64", -0.00000000000000000000000000000000000000000003140341989542684),
+ value("f64", 942829809081919600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -0.000000000000000000000000000000000000000000031403419895426836),
+ ],
+);
+
+// ./test/core/float_exprs.wast:602
+assert_return(
+ () => invoke($33, `f64.no_fold_div_mul`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000003919745428533519),
+ value("f64", -21314747179654705000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000039197454285335185),
+ ],
+);
+
+// ./test/core/float_exprs.wast:603
+assert_return(
+ () => invoke($33, `f64.no_fold_div_mul`, [
+ value("f64", -5734160003788982000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 6350805843612229000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -5734160003788981000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:607
+let $34 = instantiate(`(module
+ (func (export "f32.no_fold_div2_mul2") (param $$x f32) (result f32)
+ (f32.mul (f32.div (local.get $$x) (f32.const 2.0)) (f32.const 2.0)))
+ (func (export "f64.no_fold_div2_mul2") (param $$x f64) (result f64)
+ (f64.mul (f64.div (local.get $$x) (f64.const 2.0)) (f64.const 2.0)))
+)`);
+
+// ./test/core/float_exprs.wast:614
+assert_return(
+ () => invoke($34, `f32.no_fold_div2_mul2`, [
+ value("f32", 0.000000000000000000000000000000000000023509886),
+ ]),
+ [value("f32", 0.000000000000000000000000000000000000023509887)],
+);
+
+// ./test/core/float_exprs.wast:615
+assert_return(
+ () => invoke($34, `f64.no_fold_div2_mul2`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144023),
+ ]),
+ [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004450147717014403),
+ ],
+);
+
+// ./test/core/float_exprs.wast:619
+let $35 = instantiate(`(module
+ (func (export "no_fold_demote_promote") (param $$x f64) (result f64)
+ (f64.promote_f32 (f32.demote_f64 (local.get $$x))))
+)`);
+
+// ./test/core/float_exprs.wast:624
+assert_return(
+ () => invoke($35, `no_fold_demote_promote`, [
+ value("f64", -0.00000000000000000000000000000000000000017176297220569481),
+ ]),
+ [value("f64", -0.00000000000000000000000000000000000000017176275796615013)],
+);
+
+// ./test/core/float_exprs.wast:625
+assert_return(
+ () => invoke($35, `no_fold_demote_promote`, [
+ value("f64", -0.000000000000000000000000028464775573304055),
+ ]),
+ [value("f64", -0.00000000000000000000000002846477619188087)],
+);
+
+// ./test/core/float_exprs.wast:626
+assert_return(
+ () => invoke($35, `no_fold_demote_promote`, [
+ value("f64", 208970699699909230000000000000000),
+ ]),
+ [value("f64", 208970700445326000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:627
+assert_return(
+ () => invoke($35, `no_fold_demote_promote`, [
+ value("f64", -0.0000000000000000000000000047074160416121775),
+ ]),
+ [value("f64", -0.0000000000000000000000000047074161331556024)],
+);
+
+// ./test/core/float_exprs.wast:628
+assert_return(
+ () => invoke($35, `no_fold_demote_promote`, [
+ value("f64", 23359451497950880000000000000000),
+ ]),
+ [value("f64", 23359452224542198000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:633
+let $36 = instantiate(`(module
+ (func (export "no_fold_promote_demote") (param $$x f32) (result f32)
+ (f32.demote_f64 (f64.promote_f32 (local.get $$x))))
+)`);
+
+// ./test/core/float_exprs.wast:638
+assert_return(
+ () => invoke($36, `no_fold_promote_demote`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [`arithmetic_nan`],
+);
+
+// ./test/core/float_exprs.wast:639
+assert_return(() => invoke($36, `no_fold_promote_demote`, [value("f32", 0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:640
+assert_return(() => invoke($36, `no_fold_promote_demote`, [value("f32", -0)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:641
+assert_return(
+ () => invoke($36, `no_fold_promote_demote`, [
+ value("f32", 0.000000000000000000000000000000000000000000001),
+ ]),
+ [value("f32", 0.000000000000000000000000000000000000000000001)],
+);
+
+// ./test/core/float_exprs.wast:642
+assert_return(
+ () => invoke($36, `no_fold_promote_demote`, [
+ value("f32", -0.000000000000000000000000000000000000000000001),
+ ]),
+ [value("f32", -0.000000000000000000000000000000000000000000001)],
+);
+
+// ./test/core/float_exprs.wast:643
+assert_return(
+ () => invoke($36, `no_fold_promote_demote`, [
+ value("f32", 0.000000000000000000000000000000000000011754942),
+ ]),
+ [value("f32", 0.000000000000000000000000000000000000011754942)],
+);
+
+// ./test/core/float_exprs.wast:644
+assert_return(
+ () => invoke($36, `no_fold_promote_demote`, [
+ value("f32", -0.000000000000000000000000000000000000011754942),
+ ]),
+ [value("f32", -0.000000000000000000000000000000000000011754942)],
+);
+
+// ./test/core/float_exprs.wast:645
+assert_return(
+ () => invoke($36, `no_fold_promote_demote`, [
+ value("f32", 0.000000000000000000000000000000000000011754944),
+ ]),
+ [value("f32", 0.000000000000000000000000000000000000011754944)],
+);
+
+// ./test/core/float_exprs.wast:646
+assert_return(
+ () => invoke($36, `no_fold_promote_demote`, [
+ value("f32", -0.000000000000000000000000000000000000011754944),
+ ]),
+ [value("f32", -0.000000000000000000000000000000000000011754944)],
+);
+
+// ./test/core/float_exprs.wast:647
+assert_return(
+ () => invoke($36, `no_fold_promote_demote`, [
+ value("f32", 340282350000000000000000000000000000000),
+ ]),
+ [value("f32", 340282350000000000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:648
+assert_return(
+ () => invoke($36, `no_fold_promote_demote`, [
+ value("f32", -340282350000000000000000000000000000000),
+ ]),
+ [value("f32", -340282350000000000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:649
+assert_return(
+ () => invoke($36, `no_fold_promote_demote`, [value("f32", Infinity)]),
+ [value("f32", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:650
+assert_return(
+ () => invoke($36, `no_fold_promote_demote`, [value("f32", -Infinity)]),
+ [value("f32", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:654
+let $37 = instantiate(`(module
+ (func (export "no_demote_mixed_add") (param $$x f64) (param $$y f32) (result f32)
+ (f32.demote_f64 (f64.add (local.get $$x) (f64.promote_f32 (local.get $$y)))))
+ (func (export "no_demote_mixed_add_commuted") (param $$y f32) (param $$x f64) (result f32)
+ (f32.demote_f64 (f64.add (f64.promote_f32 (local.get $$y)) (local.get $$x))))
+)`);
+
+// ./test/core/float_exprs.wast:661
+assert_return(
+ () => invoke($37, `no_demote_mixed_add`, [
+ value("f64", 0.00000000000000000000000000004941266527909197),
+ value("f32", 0.0000000000000000000000000000000000018767183),
+ ]),
+ [value("f32", 0.000000000000000000000000000049412667)],
+);
+
+// ./test/core/float_exprs.wast:662
+assert_return(
+ () => invoke($37, `no_demote_mixed_add`, [
+ value("f64", 140851523637.69385),
+ value("f32", 401096440000),
+ ]),
+ [value("f32", 541947950000)],
+);
+
+// ./test/core/float_exprs.wast:663
+assert_return(
+ () => invoke($37, `no_demote_mixed_add`, [
+ value("f64", 0.0000000000000000000000000000000000020831160914192852),
+ value("f32", -0.0000000000000000000000000000000000006050095),
+ ]),
+ [value("f32", 0.0000000000000000000000000000000000014781066)],
+);
+
+// ./test/core/float_exprs.wast:664
+assert_return(
+ () => invoke($37, `no_demote_mixed_add`, [
+ value("f64", -0.0000010032827553674626),
+ value("f32", 0.0000000019312918),
+ ]),
+ [value("f32", -0.0000010013515)],
+);
+
+// ./test/core/float_exprs.wast:665
+assert_return(
+ () => invoke($37, `no_demote_mixed_add`, [
+ value("f64", -0.0000013840207035752711),
+ value("f32", -0.0000000000005202814),
+ ]),
+ [value("f32", -0.0000013840212)],
+);
+
+// ./test/core/float_exprs.wast:667
+assert_return(
+ () => invoke($37, `no_demote_mixed_add_commuted`, [
+ value("f32", 0.0000000000000000000000000000000000018767183),
+ value("f64", 0.00000000000000000000000000004941266527909197),
+ ]),
+ [value("f32", 0.000000000000000000000000000049412667)],
+);
+
+// ./test/core/float_exprs.wast:668
+assert_return(
+ () => invoke($37, `no_demote_mixed_add_commuted`, [
+ value("f32", 401096440000),
+ value("f64", 140851523637.69385),
+ ]),
+ [value("f32", 541947950000)],
+);
+
+// ./test/core/float_exprs.wast:669
+assert_return(
+ () => invoke($37, `no_demote_mixed_add_commuted`, [
+ value("f32", -0.0000000000000000000000000000000000006050095),
+ value("f64", 0.0000000000000000000000000000000000020831160914192852),
+ ]),
+ [value("f32", 0.0000000000000000000000000000000000014781066)],
+);
+
+// ./test/core/float_exprs.wast:670
+assert_return(
+ () => invoke($37, `no_demote_mixed_add_commuted`, [
+ value("f32", 0.0000000019312918),
+ value("f64", -0.0000010032827553674626),
+ ]),
+ [value("f32", -0.0000010013515)],
+);
+
+// ./test/core/float_exprs.wast:671
+assert_return(
+ () => invoke($37, `no_demote_mixed_add_commuted`, [
+ value("f32", -0.0000000000005202814),
+ value("f64", -0.0000013840207035752711),
+ ]),
+ [value("f32", -0.0000013840212)],
+);
+
+// ./test/core/float_exprs.wast:675
+let $38 = instantiate(`(module
+ (func (export "no_demote_mixed_sub") (param $$x f64) (param $$y f32) (result f32)
+ (f32.demote_f64 (f64.sub (local.get $$x) (f64.promote_f32 (local.get $$y)))))
+)`);
+
+// ./test/core/float_exprs.wast:680
+assert_return(
+ () => invoke($38, `no_demote_mixed_sub`, [
+ value("f64", 7869935327202668000000000),
+ value("f32", 4086347000000000000),
+ ]),
+ [value("f32", 7869931000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:681
+assert_return(
+ () => invoke($38, `no_demote_mixed_sub`, [
+ value("f64", -1535841968.9056544),
+ value("f32", 239897.28),
+ ]),
+ [value("f32", -1536081900)],
+);
+
+// ./test/core/float_exprs.wast:682
+assert_return(
+ () => invoke($38, `no_demote_mixed_sub`, [
+ value("f64", -102.19459272722602),
+ value("f32", 0.00039426138),
+ ]),
+ [value("f32", -102.194984)],
+);
+
+// ./test/core/float_exprs.wast:683
+assert_return(
+ () => invoke($38, `no_demote_mixed_sub`, [
+ value("f64", 0.00000000000000005645470375565188),
+ value("f32", 0.0000000000000000000005851077),
+ ]),
+ [value("f32", 0.00000000000000005645412)],
+);
+
+// ./test/core/float_exprs.wast:684
+assert_return(
+ () => invoke($38, `no_demote_mixed_sub`, [
+ value("f64", 27090.388466832894),
+ value("f32", 63120.89),
+ ]),
+ [value("f32", -36030.504)],
+);
+
+// ./test/core/float_exprs.wast:688
+let $39 = instantiate(`(module
+ (func (export "f32.i32.no_fold_trunc_s_convert_s") (param $$x f32) (result f32)
+ (f32.convert_i32_s (i32.trunc_f32_s (local.get $$x))))
+ (func (export "f32.i32.no_fold_trunc_u_convert_s") (param $$x f32) (result f32)
+ (f32.convert_i32_s (i32.trunc_f32_u (local.get $$x))))
+ (func (export "f32.i32.no_fold_trunc_s_convert_u") (param $$x f32) (result f32)
+ (f32.convert_i32_u (i32.trunc_f32_s (local.get $$x))))
+ (func (export "f32.i32.no_fold_trunc_u_convert_u") (param $$x f32) (result f32)
+ (f32.convert_i32_u (i32.trunc_f32_u (local.get $$x))))
+ (func (export "f64.i32.no_fold_trunc_s_convert_s") (param $$x f64) (result f64)
+ (f64.convert_i32_s (i32.trunc_f64_s (local.get $$x))))
+ (func (export "f64.i32.no_fold_trunc_u_convert_s") (param $$x f64) (result f64)
+ (f64.convert_i32_s (i32.trunc_f64_u (local.get $$x))))
+ (func (export "f64.i32.no_fold_trunc_s_convert_u") (param $$x f64) (result f64)
+ (f64.convert_i32_u (i32.trunc_f64_s (local.get $$x))))
+ (func (export "f64.i32.no_fold_trunc_u_convert_u") (param $$x f64) (result f64)
+ (f64.convert_i32_u (i32.trunc_f64_u (local.get $$x))))
+ (func (export "f32.i64.no_fold_trunc_s_convert_s") (param $$x f32) (result f32)
+ (f32.convert_i64_s (i64.trunc_f32_s (local.get $$x))))
+ (func (export "f32.i64.no_fold_trunc_u_convert_s") (param $$x f32) (result f32)
+ (f32.convert_i64_s (i64.trunc_f32_u (local.get $$x))))
+ (func (export "f32.i64.no_fold_trunc_s_convert_u") (param $$x f32) (result f32)
+ (f32.convert_i64_u (i64.trunc_f32_s (local.get $$x))))
+ (func (export "f32.i64.no_fold_trunc_u_convert_u") (param $$x f32) (result f32)
+ (f32.convert_i64_u (i64.trunc_f32_u (local.get $$x))))
+ (func (export "f64.i64.no_fold_trunc_s_convert_s") (param $$x f64) (result f64)
+ (f64.convert_i64_s (i64.trunc_f64_s (local.get $$x))))
+ (func (export "f64.i64.no_fold_trunc_u_convert_s") (param $$x f64) (result f64)
+ (f64.convert_i64_s (i64.trunc_f64_u (local.get $$x))))
+ (func (export "f64.i64.no_fold_trunc_s_convert_u") (param $$x f64) (result f64)
+ (f64.convert_i64_u (i64.trunc_f64_s (local.get $$x))))
+ (func (export "f64.i64.no_fold_trunc_u_convert_u") (param $$x f64) (result f64)
+ (f64.convert_i64_u (i64.trunc_f64_u (local.get $$x))))
+)`);
+
+// ./test/core/float_exprs.wast:723
+assert_return(
+ () => invoke($39, `f32.i32.no_fold_trunc_s_convert_s`, [value("f32", 1.5)]),
+ [value("f32", 1)],
+);
+
+// ./test/core/float_exprs.wast:724
+assert_return(
+ () => invoke($39, `f32.i32.no_fold_trunc_s_convert_s`, [value("f32", -1.5)]),
+ [value("f32", -1)],
+);
+
+// ./test/core/float_exprs.wast:725
+assert_return(
+ () => invoke($39, `f32.i32.no_fold_trunc_u_convert_s`, [value("f32", 1.5)]),
+ [value("f32", 1)],
+);
+
+// ./test/core/float_exprs.wast:726
+assert_return(
+ () => invoke($39, `f32.i32.no_fold_trunc_u_convert_s`, [value("f32", -0.5)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:727
+assert_return(
+ () => invoke($39, `f32.i32.no_fold_trunc_s_convert_u`, [value("f32", 1.5)]),
+ [value("f32", 1)],
+);
+
+// ./test/core/float_exprs.wast:728
+assert_return(
+ () => invoke($39, `f32.i32.no_fold_trunc_s_convert_u`, [value("f32", -1.5)]),
+ [value("f32", 4294967300)],
+);
+
+// ./test/core/float_exprs.wast:729
+assert_return(
+ () => invoke($39, `f32.i32.no_fold_trunc_u_convert_u`, [value("f32", 1.5)]),
+ [value("f32", 1)],
+);
+
+// ./test/core/float_exprs.wast:730
+assert_return(
+ () => invoke($39, `f32.i32.no_fold_trunc_u_convert_u`, [value("f32", -0.5)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:732
+assert_return(
+ () => invoke($39, `f64.i32.no_fold_trunc_s_convert_s`, [value("f64", 1.5)]),
+ [value("f64", 1)],
+);
+
+// ./test/core/float_exprs.wast:733
+assert_return(
+ () => invoke($39, `f64.i32.no_fold_trunc_s_convert_s`, [value("f64", -1.5)]),
+ [value("f64", -1)],
+);
+
+// ./test/core/float_exprs.wast:734
+assert_return(
+ () => invoke($39, `f64.i32.no_fold_trunc_u_convert_s`, [value("f64", 1.5)]),
+ [value("f64", 1)],
+);
+
+// ./test/core/float_exprs.wast:735
+assert_return(
+ () => invoke($39, `f64.i32.no_fold_trunc_u_convert_s`, [value("f64", -0.5)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:736
+assert_return(
+ () => invoke($39, `f64.i32.no_fold_trunc_s_convert_u`, [value("f64", 1.5)]),
+ [value("f64", 1)],
+);
+
+// ./test/core/float_exprs.wast:737
+assert_return(
+ () => invoke($39, `f64.i32.no_fold_trunc_s_convert_u`, [value("f64", -1.5)]),
+ [value("f64", 4294967295)],
+);
+
+// ./test/core/float_exprs.wast:738
+assert_return(
+ () => invoke($39, `f64.i32.no_fold_trunc_u_convert_u`, [value("f64", 1.5)]),
+ [value("f64", 1)],
+);
+
+// ./test/core/float_exprs.wast:739
+assert_return(
+ () => invoke($39, `f64.i32.no_fold_trunc_u_convert_u`, [value("f64", -0.5)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:741
+assert_return(
+ () => invoke($39, `f32.i64.no_fold_trunc_s_convert_s`, [value("f32", 1.5)]),
+ [value("f32", 1)],
+);
+
+// ./test/core/float_exprs.wast:742
+assert_return(
+ () => invoke($39, `f32.i64.no_fold_trunc_s_convert_s`, [value("f32", -1.5)]),
+ [value("f32", -1)],
+);
+
+// ./test/core/float_exprs.wast:743
+assert_return(
+ () => invoke($39, `f32.i64.no_fold_trunc_u_convert_s`, [value("f32", 1.5)]),
+ [value("f32", 1)],
+);
+
+// ./test/core/float_exprs.wast:744
+assert_return(
+ () => invoke($39, `f32.i64.no_fold_trunc_u_convert_s`, [value("f32", -0.5)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:745
+assert_return(
+ () => invoke($39, `f32.i64.no_fold_trunc_s_convert_u`, [value("f32", 1.5)]),
+ [value("f32", 1)],
+);
+
+// ./test/core/float_exprs.wast:746
+assert_return(
+ () => invoke($39, `f32.i64.no_fold_trunc_s_convert_u`, [value("f32", -1.5)]),
+ [value("f32", 18446744000000000000)],
+);
+
+// ./test/core/float_exprs.wast:747
+assert_return(
+ () => invoke($39, `f32.i64.no_fold_trunc_u_convert_u`, [value("f32", 1.5)]),
+ [value("f32", 1)],
+);
+
+// ./test/core/float_exprs.wast:748
+assert_return(
+ () => invoke($39, `f32.i64.no_fold_trunc_u_convert_u`, [value("f32", -0.5)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:750
+assert_return(
+ () => invoke($39, `f64.i64.no_fold_trunc_s_convert_s`, [value("f64", 1.5)]),
+ [value("f64", 1)],
+);
+
+// ./test/core/float_exprs.wast:751
+assert_return(
+ () => invoke($39, `f64.i64.no_fold_trunc_s_convert_s`, [value("f64", -1.5)]),
+ [value("f64", -1)],
+);
+
+// ./test/core/float_exprs.wast:752
+assert_return(
+ () => invoke($39, `f64.i64.no_fold_trunc_u_convert_s`, [value("f64", 1.5)]),
+ [value("f64", 1)],
+);
+
+// ./test/core/float_exprs.wast:753
+assert_return(
+ () => invoke($39, `f64.i64.no_fold_trunc_u_convert_s`, [value("f64", -0.5)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:754
+assert_return(
+ () => invoke($39, `f64.i64.no_fold_trunc_s_convert_u`, [value("f64", 1.5)]),
+ [value("f64", 1)],
+);
+
+// ./test/core/float_exprs.wast:755
+assert_return(
+ () => invoke($39, `f64.i64.no_fold_trunc_s_convert_u`, [value("f64", -1.5)]),
+ [value("f64", 18446744073709552000)],
+);
+
+// ./test/core/float_exprs.wast:756
+assert_return(
+ () => invoke($39, `f64.i64.no_fold_trunc_u_convert_u`, [value("f64", 1.5)]),
+ [value("f64", 1)],
+);
+
+// ./test/core/float_exprs.wast:757
+assert_return(
+ () => invoke($39, `f64.i64.no_fold_trunc_u_convert_u`, [value("f64", -0.5)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:763
+let $40 = instantiate(`(module
+ (memory 1 1)
+ (func (export "init") (param $$i i32) (param $$x f32) (f32.store (local.get $$i) (local.get $$x)))
+
+ (func (export "run") (param $$n i32) (param $$z f32)
+ (local $$i i32)
+ (block $$exit
+ (loop $$cont
+ (f32.store
+ (local.get $$i)
+ (f32.div (f32.load (local.get $$i)) (local.get $$z))
+ )
+ (local.set $$i (i32.add (local.get $$i) (i32.const 4)))
+ (br_if $$cont (i32.lt_u (local.get $$i) (local.get $$n)))
+ )
+ )
+ )
+
+ (func (export "check") (param $$i i32) (result f32) (f32.load (local.get $$i)))
+)`);
+
+// ./test/core/float_exprs.wast:784
+invoke($40, `init`, [0, value("f32", 15.1)]);
+
+// ./test/core/float_exprs.wast:785
+invoke($40, `init`, [4, value("f32", 15.2)]);
+
+// ./test/core/float_exprs.wast:786
+invoke($40, `init`, [8, value("f32", 15.3)]);
+
+// ./test/core/float_exprs.wast:787
+invoke($40, `init`, [12, value("f32", 15.4)]);
+
+// ./test/core/float_exprs.wast:788
+assert_return(() => invoke($40, `check`, [0]), [value("f32", 15.1)]);
+
+// ./test/core/float_exprs.wast:789
+assert_return(() => invoke($40, `check`, [4]), [value("f32", 15.2)]);
+
+// ./test/core/float_exprs.wast:790
+assert_return(() => invoke($40, `check`, [8]), [value("f32", 15.3)]);
+
+// ./test/core/float_exprs.wast:791
+assert_return(() => invoke($40, `check`, [12]), [value("f32", 15.4)]);
+
+// ./test/core/float_exprs.wast:792
+invoke($40, `run`, [16, value("f32", 3)]);
+
+// ./test/core/float_exprs.wast:793
+assert_return(() => invoke($40, `check`, [0]), [value("f32", 5.0333333)]);
+
+// ./test/core/float_exprs.wast:794
+assert_return(() => invoke($40, `check`, [4]), [value("f32", 5.0666666)]);
+
+// ./test/core/float_exprs.wast:795
+assert_return(() => invoke($40, `check`, [8]), [value("f32", 5.1)]);
+
+// ./test/core/float_exprs.wast:796
+assert_return(() => invoke($40, `check`, [12]), [value("f32", 5.133333)]);
+
+// ./test/core/float_exprs.wast:798
+let $41 = instantiate(`(module
+ (memory 1 1)
+ (func (export "init") (param $$i i32) (param $$x f64) (f64.store (local.get $$i) (local.get $$x)))
+
+ (func (export "run") (param $$n i32) (param $$z f64)
+ (local $$i i32)
+ (block $$exit
+ (loop $$cont
+ (f64.store
+ (local.get $$i)
+ (f64.div (f64.load (local.get $$i)) (local.get $$z))
+ )
+ (local.set $$i (i32.add (local.get $$i) (i32.const 8)))
+ (br_if $$cont (i32.lt_u (local.get $$i) (local.get $$n)))
+ )
+ )
+ )
+
+ (func (export "check") (param $$i i32) (result f64) (f64.load (local.get $$i)))
+)`);
+
+// ./test/core/float_exprs.wast:819
+invoke($41, `init`, [0, value("f64", 15.1)]);
+
+// ./test/core/float_exprs.wast:820
+invoke($41, `init`, [8, value("f64", 15.2)]);
+
+// ./test/core/float_exprs.wast:821
+invoke($41, `init`, [16, value("f64", 15.3)]);
+
+// ./test/core/float_exprs.wast:822
+invoke($41, `init`, [24, value("f64", 15.4)]);
+
+// ./test/core/float_exprs.wast:823
+assert_return(() => invoke($41, `check`, [0]), [value("f64", 15.1)]);
+
+// ./test/core/float_exprs.wast:824
+assert_return(() => invoke($41, `check`, [8]), [value("f64", 15.2)]);
+
+// ./test/core/float_exprs.wast:825
+assert_return(() => invoke($41, `check`, [16]), [value("f64", 15.3)]);
+
+// ./test/core/float_exprs.wast:826
+assert_return(() => invoke($41, `check`, [24]), [value("f64", 15.4)]);
+
+// ./test/core/float_exprs.wast:827
+invoke($41, `run`, [32, value("f64", 3)]);
+
+// ./test/core/float_exprs.wast:828
+assert_return(() => invoke($41, `check`, [0]), [value("f64", 5.033333333333333)]);
+
+// ./test/core/float_exprs.wast:829
+assert_return(() => invoke($41, `check`, [8]), [value("f64", 5.066666666666666)]);
+
+// ./test/core/float_exprs.wast:830
+assert_return(() => invoke($41, `check`, [16]), [value("f64", 5.1000000000000005)]);
+
+// ./test/core/float_exprs.wast:831
+assert_return(() => invoke($41, `check`, [24]), [value("f64", 5.133333333333334)]);
+
+// ./test/core/float_exprs.wast:835
+let $42 = instantiate(`(module
+ (func (export "f32.ult") (param $$x f32) (param $$y f32) (result i32) (i32.eqz (f32.ge (local.get $$x) (local.get $$y))))
+ (func (export "f32.ule") (param $$x f32) (param $$y f32) (result i32) (i32.eqz (f32.gt (local.get $$x) (local.get $$y))))
+ (func (export "f32.ugt") (param $$x f32) (param $$y f32) (result i32) (i32.eqz (f32.le (local.get $$x) (local.get $$y))))
+ (func (export "f32.uge") (param $$x f32) (param $$y f32) (result i32) (i32.eqz (f32.lt (local.get $$x) (local.get $$y))))
+
+ (func (export "f64.ult") (param $$x f64) (param $$y f64) (result i32) (i32.eqz (f64.ge (local.get $$x) (local.get $$y))))
+ (func (export "f64.ule") (param $$x f64) (param $$y f64) (result i32) (i32.eqz (f64.gt (local.get $$x) (local.get $$y))))
+ (func (export "f64.ugt") (param $$x f64) (param $$y f64) (result i32) (i32.eqz (f64.le (local.get $$x) (local.get $$y))))
+ (func (export "f64.uge") (param $$x f64) (param $$y f64) (result i32) (i32.eqz (f64.lt (local.get $$x) (local.get $$y))))
+)`);
+
+// ./test/core/float_exprs.wast:847
+assert_return(() => invoke($42, `f32.ult`, [value("f32", 3), value("f32", 2)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:848
+assert_return(() => invoke($42, `f32.ult`, [value("f32", 2), value("f32", 2)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:849
+assert_return(() => invoke($42, `f32.ult`, [value("f32", 2), value("f32", 3)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:850
+assert_return(
+ () => invoke($42, `f32.ult`, [value("f32", 2), bytes("f32", [0x0, 0x0, 0xc0, 0x7f])]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:851
+assert_return(() => invoke($42, `f32.ule`, [value("f32", 3), value("f32", 2)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:852
+assert_return(() => invoke($42, `f32.ule`, [value("f32", 2), value("f32", 2)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:853
+assert_return(() => invoke($42, `f32.ule`, [value("f32", 2), value("f32", 3)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:854
+assert_return(
+ () => invoke($42, `f32.ule`, [value("f32", 2), bytes("f32", [0x0, 0x0, 0xc0, 0x7f])]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:855
+assert_return(() => invoke($42, `f32.ugt`, [value("f32", 3), value("f32", 2)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:856
+assert_return(() => invoke($42, `f32.ugt`, [value("f32", 2), value("f32", 2)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:857
+assert_return(() => invoke($42, `f32.ugt`, [value("f32", 2), value("f32", 3)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:858
+assert_return(
+ () => invoke($42, `f32.ugt`, [value("f32", 2), bytes("f32", [0x0, 0x0, 0xc0, 0x7f])]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:859
+assert_return(() => invoke($42, `f32.uge`, [value("f32", 3), value("f32", 2)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:860
+assert_return(() => invoke($42, `f32.uge`, [value("f32", 2), value("f32", 2)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:861
+assert_return(() => invoke($42, `f32.uge`, [value("f32", 2), value("f32", 3)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:862
+assert_return(
+ () => invoke($42, `f32.uge`, [value("f32", 2), bytes("f32", [0x0, 0x0, 0xc0, 0x7f])]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:863
+assert_return(() => invoke($42, `f64.ult`, [value("f64", 3), value("f64", 2)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:864
+assert_return(() => invoke($42, `f64.ult`, [value("f64", 2), value("f64", 2)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:865
+assert_return(() => invoke($42, `f64.ult`, [value("f64", 2), value("f64", 3)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:866
+assert_return(
+ () => invoke($42, `f64.ult`, [
+ value("f64", 2),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:867
+assert_return(() => invoke($42, `f64.ule`, [value("f64", 3), value("f64", 2)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:868
+assert_return(() => invoke($42, `f64.ule`, [value("f64", 2), value("f64", 2)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:869
+assert_return(() => invoke($42, `f64.ule`, [value("f64", 2), value("f64", 3)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:870
+assert_return(
+ () => invoke($42, `f64.ule`, [
+ value("f64", 2),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:871
+assert_return(() => invoke($42, `f64.ugt`, [value("f64", 3), value("f64", 2)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:872
+assert_return(() => invoke($42, `f64.ugt`, [value("f64", 2), value("f64", 2)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:873
+assert_return(() => invoke($42, `f64.ugt`, [value("f64", 2), value("f64", 3)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:874
+assert_return(
+ () => invoke($42, `f64.ugt`, [
+ value("f64", 2),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:875
+assert_return(() => invoke($42, `f64.uge`, [value("f64", 3), value("f64", 2)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:876
+assert_return(() => invoke($42, `f64.uge`, [value("f64", 2), value("f64", 2)]), [value("i32", 1)]);
+
+// ./test/core/float_exprs.wast:877
+assert_return(() => invoke($42, `f64.uge`, [value("f64", 2), value("f64", 3)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:878
+assert_return(
+ () => invoke($42, `f64.uge`, [
+ value("f64", 2),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:882
+let $43 = instantiate(`(module
+ (func (export "f32.no_fold_lt_select") (param $$x f32) (param $$y f32) (result f32) (select (local.get $$x) (local.get $$y) (f32.lt (local.get $$x) (local.get $$y))))
+ (func (export "f32.no_fold_le_select") (param $$x f32) (param $$y f32) (result f32) (select (local.get $$x) (local.get $$y) (f32.le (local.get $$x) (local.get $$y))))
+ (func (export "f32.no_fold_gt_select") (param $$x f32) (param $$y f32) (result f32) (select (local.get $$x) (local.get $$y) (f32.gt (local.get $$x) (local.get $$y))))
+ (func (export "f32.no_fold_ge_select") (param $$x f32) (param $$y f32) (result f32) (select (local.get $$x) (local.get $$y) (f32.ge (local.get $$x) (local.get $$y))))
+
+ (func (export "f64.no_fold_lt_select") (param $$x f64) (param $$y f64) (result f64) (select (local.get $$x) (local.get $$y) (f64.lt (local.get $$x) (local.get $$y))))
+ (func (export "f64.no_fold_le_select") (param $$x f64) (param $$y f64) (result f64) (select (local.get $$x) (local.get $$y) (f64.le (local.get $$x) (local.get $$y))))
+ (func (export "f64.no_fold_gt_select") (param $$x f64) (param $$y f64) (result f64) (select (local.get $$x) (local.get $$y) (f64.gt (local.get $$x) (local.get $$y))))
+ (func (export "f64.no_fold_ge_select") (param $$x f64) (param $$y f64) (result f64) (select (local.get $$x) (local.get $$y) (f64.ge (local.get $$x) (local.get $$y))))
+)`);
+
+// ./test/core/float_exprs.wast:894
+assert_return(
+ () => invoke($43, `f32.no_fold_lt_select`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:895
+assert_return(
+ () => invoke($43, `f32.no_fold_lt_select`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:896
+assert_return(
+ () => invoke($43, `f32.no_fold_lt_select`, [value("f32", 0), value("f32", -0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:897
+assert_return(
+ () => invoke($43, `f32.no_fold_lt_select`, [value("f32", -0), value("f32", 0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:898
+assert_return(
+ () => invoke($43, `f32.no_fold_le_select`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:899
+assert_return(
+ () => invoke($43, `f32.no_fold_le_select`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:900
+assert_return(
+ () => invoke($43, `f32.no_fold_le_select`, [value("f32", 0), value("f32", -0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:901
+assert_return(
+ () => invoke($43, `f32.no_fold_le_select`, [value("f32", -0), value("f32", 0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:902
+assert_return(
+ () => invoke($43, `f32.no_fold_gt_select`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:903
+assert_return(
+ () => invoke($43, `f32.no_fold_gt_select`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:904
+assert_return(
+ () => invoke($43, `f32.no_fold_gt_select`, [value("f32", 0), value("f32", -0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:905
+assert_return(
+ () => invoke($43, `f32.no_fold_gt_select`, [value("f32", -0), value("f32", 0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:906
+assert_return(
+ () => invoke($43, `f32.no_fold_ge_select`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:907
+assert_return(
+ () => invoke($43, `f32.no_fold_ge_select`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:908
+assert_return(
+ () => invoke($43, `f32.no_fold_ge_select`, [value("f32", 0), value("f32", -0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:909
+assert_return(
+ () => invoke($43, `f32.no_fold_ge_select`, [value("f32", -0), value("f32", 0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:910
+assert_return(
+ () => invoke($43, `f64.no_fold_lt_select`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:911
+assert_return(
+ () => invoke($43, `f64.no_fold_lt_select`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:912
+assert_return(
+ () => invoke($43, `f64.no_fold_lt_select`, [value("f64", 0), value("f64", -0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:913
+assert_return(
+ () => invoke($43, `f64.no_fold_lt_select`, [value("f64", -0), value("f64", 0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:914
+assert_return(
+ () => invoke($43, `f64.no_fold_le_select`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:915
+assert_return(
+ () => invoke($43, `f64.no_fold_le_select`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:916
+assert_return(
+ () => invoke($43, `f64.no_fold_le_select`, [value("f64", 0), value("f64", -0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:917
+assert_return(
+ () => invoke($43, `f64.no_fold_le_select`, [value("f64", -0), value("f64", 0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:918
+assert_return(
+ () => invoke($43, `f64.no_fold_gt_select`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:919
+assert_return(
+ () => invoke($43, `f64.no_fold_gt_select`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:920
+assert_return(
+ () => invoke($43, `f64.no_fold_gt_select`, [value("f64", 0), value("f64", -0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:921
+assert_return(
+ () => invoke($43, `f64.no_fold_gt_select`, [value("f64", -0), value("f64", 0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:922
+assert_return(
+ () => invoke($43, `f64.no_fold_ge_select`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:923
+assert_return(
+ () => invoke($43, `f64.no_fold_ge_select`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:924
+assert_return(
+ () => invoke($43, `f64.no_fold_ge_select`, [value("f64", 0), value("f64", -0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:925
+assert_return(
+ () => invoke($43, `f64.no_fold_ge_select`, [value("f64", -0), value("f64", 0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:929
+let $44 = instantiate(`(module
+ (func (export "f32.no_fold_lt_if") (param $$x f32) (param $$y f32) (result f32)
+ (if (result f32) (f32.lt (local.get $$x) (local.get $$y))
+ (then (local.get $$x)) (else (local.get $$y))
+ )
+ )
+ (func (export "f32.no_fold_le_if") (param $$x f32) (param $$y f32) (result f32)
+ (if (result f32) (f32.le (local.get $$x) (local.get $$y))
+ (then (local.get $$x)) (else (local.get $$y))
+ )
+ )
+ (func (export "f32.no_fold_gt_if") (param $$x f32) (param $$y f32) (result f32)
+ (if (result f32) (f32.gt (local.get $$x) (local.get $$y))
+ (then (local.get $$x)) (else (local.get $$y))
+ )
+ )
+ (func (export "f32.no_fold_ge_if") (param $$x f32) (param $$y f32) (result f32)
+ (if (result f32) (f32.ge (local.get $$x) (local.get $$y))
+ (then (local.get $$x)) (else (local.get $$y))
+ )
+ )
+
+ (func (export "f64.no_fold_lt_if") (param $$x f64) (param $$y f64) (result f64)
+ (if (result f64) (f64.lt (local.get $$x) (local.get $$y))
+ (then (local.get $$x)) (else (local.get $$y))
+ )
+ )
+ (func (export "f64.no_fold_le_if") (param $$x f64) (param $$y f64) (result f64)
+ (if (result f64) (f64.le (local.get $$x) (local.get $$y))
+ (then (local.get $$x)) (else (local.get $$y))
+ )
+ )
+ (func (export "f64.no_fold_gt_if") (param $$x f64) (param $$y f64) (result f64)
+ (if (result f64) (f64.gt (local.get $$x) (local.get $$y))
+ (then (local.get $$x)) (else (local.get $$y))
+ )
+ )
+ (func (export "f64.no_fold_ge_if") (param $$x f64) (param $$y f64) (result f64)
+ (if (result f64) (f64.ge (local.get $$x) (local.get $$y))
+ (then (local.get $$x)) (else (local.get $$y))
+ )
+ )
+)`);
+
+// ./test/core/float_exprs.wast:973
+assert_return(
+ () => invoke($44, `f32.no_fold_lt_if`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:974
+assert_return(
+ () => invoke($44, `f32.no_fold_lt_if`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:975
+assert_return(
+ () => invoke($44, `f32.no_fold_lt_if`, [value("f32", 0), value("f32", -0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:976
+assert_return(
+ () => invoke($44, `f32.no_fold_lt_if`, [value("f32", -0), value("f32", 0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:977
+assert_return(
+ () => invoke($44, `f32.no_fold_le_if`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:978
+assert_return(
+ () => invoke($44, `f32.no_fold_le_if`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:979
+assert_return(
+ () => invoke($44, `f32.no_fold_le_if`, [value("f32", 0), value("f32", -0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:980
+assert_return(
+ () => invoke($44, `f32.no_fold_le_if`, [value("f32", -0), value("f32", 0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:981
+assert_return(
+ () => invoke($44, `f32.no_fold_gt_if`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:982
+assert_return(
+ () => invoke($44, `f32.no_fold_gt_if`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:983
+assert_return(
+ () => invoke($44, `f32.no_fold_gt_if`, [value("f32", 0), value("f32", -0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:984
+assert_return(
+ () => invoke($44, `f32.no_fold_gt_if`, [value("f32", -0), value("f32", 0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:985
+assert_return(
+ () => invoke($44, `f32.no_fold_ge_if`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:986
+assert_return(
+ () => invoke($44, `f32.no_fold_ge_if`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:987
+assert_return(
+ () => invoke($44, `f32.no_fold_ge_if`, [value("f32", 0), value("f32", -0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:988
+assert_return(
+ () => invoke($44, `f32.no_fold_ge_if`, [value("f32", -0), value("f32", 0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:989
+assert_return(
+ () => invoke($44, `f64.no_fold_lt_if`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:990
+assert_return(
+ () => invoke($44, `f64.no_fold_lt_if`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:991
+assert_return(
+ () => invoke($44, `f64.no_fold_lt_if`, [value("f64", 0), value("f64", -0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:992
+assert_return(
+ () => invoke($44, `f64.no_fold_lt_if`, [value("f64", -0), value("f64", 0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:993
+assert_return(
+ () => invoke($44, `f64.no_fold_le_if`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:994
+assert_return(
+ () => invoke($44, `f64.no_fold_le_if`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:995
+assert_return(
+ () => invoke($44, `f64.no_fold_le_if`, [value("f64", 0), value("f64", -0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:996
+assert_return(
+ () => invoke($44, `f64.no_fold_le_if`, [value("f64", -0), value("f64", 0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:997
+assert_return(
+ () => invoke($44, `f64.no_fold_gt_if`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:998
+assert_return(
+ () => invoke($44, `f64.no_fold_gt_if`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:999
+assert_return(
+ () => invoke($44, `f64.no_fold_gt_if`, [value("f64", 0), value("f64", -0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:1000
+assert_return(
+ () => invoke($44, `f64.no_fold_gt_if`, [value("f64", -0), value("f64", 0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:1001
+assert_return(
+ () => invoke($44, `f64.no_fold_ge_if`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1002
+assert_return(
+ () => invoke($44, `f64.no_fold_ge_if`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:1003
+assert_return(
+ () => invoke($44, `f64.no_fold_ge_if`, [value("f64", 0), value("f64", -0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:1004
+assert_return(
+ () => invoke($44, `f64.no_fold_ge_if`, [value("f64", -0), value("f64", 0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:1008
+let $45 = instantiate(`(module
+ (func (export "f32.no_fold_lt_select_to_abs") (param $$x f32) (result f32) (select (f32.neg (local.get $$x)) (local.get $$x) (f32.lt (local.get $$x) (f32.const 0.0))))
+ (func (export "f32.no_fold_le_select_to_abs") (param $$x f32) (result f32) (select (f32.neg (local.get $$x)) (local.get $$x) (f32.le (local.get $$x) (f32.const -0.0))))
+ (func (export "f32.no_fold_gt_select_to_abs") (param $$x f32) (result f32) (select (local.get $$x) (f32.neg (local.get $$x)) (f32.gt (local.get $$x) (f32.const -0.0))))
+ (func (export "f32.no_fold_ge_select_to_abs") (param $$x f32) (result f32) (select (local.get $$x) (f32.neg (local.get $$x)) (f32.ge (local.get $$x) (f32.const 0.0))))
+
+ (func (export "f64.no_fold_lt_select_to_abs") (param $$x f64) (result f64) (select (f64.neg (local.get $$x)) (local.get $$x) (f64.lt (local.get $$x) (f64.const 0.0))))
+ (func (export "f64.no_fold_le_select_to_abs") (param $$x f64) (result f64) (select (f64.neg (local.get $$x)) (local.get $$x) (f64.le (local.get $$x) (f64.const -0.0))))
+ (func (export "f64.no_fold_gt_select_to_abs") (param $$x f64) (result f64) (select (local.get $$x) (f64.neg (local.get $$x)) (f64.gt (local.get $$x) (f64.const -0.0))))
+ (func (export "f64.no_fold_ge_select_to_abs") (param $$x f64) (result f64) (select (local.get $$x) (f64.neg (local.get $$x)) (f64.ge (local.get $$x) (f64.const 0.0))))
+)`);
+
+// ./test/core/float_exprs.wast:1020
+assert_return(
+ () => invoke($45, `f32.no_fold_lt_select_to_abs`, [
+ bytes("f32", [0x0, 0x0, 0xa0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1021
+assert_return(
+ () => invoke($45, `f32.no_fold_lt_select_to_abs`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0xff]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1022
+assert_return(() => invoke($45, `f32.no_fold_lt_select_to_abs`, [value("f32", 0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1023
+assert_return(() => invoke($45, `f32.no_fold_lt_select_to_abs`, [value("f32", -0)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:1024
+assert_return(
+ () => invoke($45, `f32.no_fold_le_select_to_abs`, [
+ bytes("f32", [0x0, 0x0, 0xa0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1025
+assert_return(
+ () => invoke($45, `f32.no_fold_le_select_to_abs`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0xff]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1026
+assert_return(() => invoke($45, `f32.no_fold_le_select_to_abs`, [value("f32", 0)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:1027
+assert_return(() => invoke($45, `f32.no_fold_le_select_to_abs`, [value("f32", -0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1028
+assert_return(
+ () => invoke($45, `f32.no_fold_gt_select_to_abs`, [
+ bytes("f32", [0x0, 0x0, 0xa0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xa0, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1029
+assert_return(
+ () => invoke($45, `f32.no_fold_gt_select_to_abs`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0xff]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1030
+assert_return(() => invoke($45, `f32.no_fold_gt_select_to_abs`, [value("f32", 0)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:1031
+assert_return(() => invoke($45, `f32.no_fold_gt_select_to_abs`, [value("f32", -0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1032
+assert_return(
+ () => invoke($45, `f32.no_fold_ge_select_to_abs`, [
+ bytes("f32", [0x0, 0x0, 0xa0, 0x7f]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xa0, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1033
+assert_return(
+ () => invoke($45, `f32.no_fold_ge_select_to_abs`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0xff]),
+ ]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1034
+assert_return(() => invoke($45, `f32.no_fold_ge_select_to_abs`, [value("f32", 0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1035
+assert_return(() => invoke($45, `f32.no_fold_ge_select_to_abs`, [value("f32", -0)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:1036
+assert_return(
+ () => invoke($45, `f64.no_fold_lt_select_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1037
+assert_return(
+ () => invoke($45, `f64.no_fold_lt_select_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1038
+assert_return(() => invoke($45, `f64.no_fold_lt_select_to_abs`, [value("f64", 0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1039
+assert_return(() => invoke($45, `f64.no_fold_lt_select_to_abs`, [value("f64", -0)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:1040
+assert_return(
+ () => invoke($45, `f64.no_fold_le_select_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1041
+assert_return(
+ () => invoke($45, `f64.no_fold_le_select_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1042
+assert_return(() => invoke($45, `f64.no_fold_le_select_to_abs`, [value("f64", 0)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:1043
+assert_return(() => invoke($45, `f64.no_fold_le_select_to_abs`, [value("f64", -0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1044
+assert_return(
+ () => invoke($45, `f64.no_fold_gt_select_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1045
+assert_return(
+ () => invoke($45, `f64.no_fold_gt_select_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1046
+assert_return(() => invoke($45, `f64.no_fold_gt_select_to_abs`, [value("f64", 0)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:1047
+assert_return(() => invoke($45, `f64.no_fold_gt_select_to_abs`, [value("f64", -0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1048
+assert_return(
+ () => invoke($45, `f64.no_fold_ge_select_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1049
+assert_return(
+ () => invoke($45, `f64.no_fold_ge_select_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1050
+assert_return(() => invoke($45, `f64.no_fold_ge_select_to_abs`, [value("f64", 0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1051
+assert_return(() => invoke($45, `f64.no_fold_ge_select_to_abs`, [value("f64", -0)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:1055
+let $46 = instantiate(`(module
+ (func (export "f32.no_fold_lt_if_to_abs") (param $$x f32) (result f32)
+ (if (result f32) (f32.lt (local.get $$x) (f32.const 0.0))
+ (then (f32.neg (local.get $$x))) (else (local.get $$x))
+ )
+ )
+ (func (export "f32.no_fold_le_if_to_abs") (param $$x f32) (result f32)
+ (if (result f32) (f32.le (local.get $$x) (f32.const -0.0))
+ (then (f32.neg (local.get $$x))) (else (local.get $$x))
+ )
+ )
+ (func (export "f32.no_fold_gt_if_to_abs") (param $$x f32) (result f32)
+ (if (result f32) (f32.gt (local.get $$x) (f32.const -0.0))
+ (then (local.get $$x)) (else (f32.neg (local.get $$x)))
+ )
+ )
+ (func (export "f32.no_fold_ge_if_to_abs") (param $$x f32) (result f32)
+ (if (result f32) (f32.ge (local.get $$x) (f32.const 0.0))
+ (then (local.get $$x)) (else (f32.neg (local.get $$x)))
+ )
+ )
+
+ (func (export "f64.no_fold_lt_if_to_abs") (param $$x f64) (result f64)
+ (if (result f64) (f64.lt (local.get $$x) (f64.const 0.0))
+ (then (f64.neg (local.get $$x))) (else (local.get $$x))
+ )
+ )
+ (func (export "f64.no_fold_le_if_to_abs") (param $$x f64) (result f64)
+ (if (result f64) (f64.le (local.get $$x) (f64.const -0.0))
+ (then (f64.neg (local.get $$x))) (else (local.get $$x))
+ )
+ )
+ (func (export "f64.no_fold_gt_if_to_abs") (param $$x f64) (result f64)
+ (if (result f64) (f64.gt (local.get $$x) (f64.const -0.0))
+ (then (local.get $$x)) (else (f64.neg (local.get $$x)))
+ )
+ )
+ (func (export "f64.no_fold_ge_if_to_abs") (param $$x f64) (result f64)
+ (if (result f64) (f64.ge (local.get $$x) (f64.const 0.0))
+ (then (local.get $$x)) (else (f64.neg (local.get $$x)))
+ )
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1099
+assert_return(
+ () => invoke($46, `f32.no_fold_lt_if_to_abs`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1100
+assert_return(
+ () => invoke($46, `f32.no_fold_lt_if_to_abs`, [bytes("f32", [0x0, 0x0, 0xc0, 0xff])]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1101
+assert_return(() => invoke($46, `f32.no_fold_lt_if_to_abs`, [value("f32", 0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1102
+assert_return(() => invoke($46, `f32.no_fold_lt_if_to_abs`, [value("f32", -0)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:1103
+assert_return(
+ () => invoke($46, `f32.no_fold_le_if_to_abs`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1104
+assert_return(
+ () => invoke($46, `f32.no_fold_le_if_to_abs`, [bytes("f32", [0x0, 0x0, 0xc0, 0xff])]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1105
+assert_return(() => invoke($46, `f32.no_fold_le_if_to_abs`, [value("f32", 0)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:1106
+assert_return(() => invoke($46, `f32.no_fold_le_if_to_abs`, [value("f32", -0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1107
+assert_return(
+ () => invoke($46, `f32.no_fold_gt_if_to_abs`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [bytes("f32", [0x0, 0x0, 0xa0, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1108
+assert_return(
+ () => invoke($46, `f32.no_fold_gt_if_to_abs`, [bytes("f32", [0x0, 0x0, 0xc0, 0xff])]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1109
+assert_return(() => invoke($46, `f32.no_fold_gt_if_to_abs`, [value("f32", 0)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:1110
+assert_return(() => invoke($46, `f32.no_fold_gt_if_to_abs`, [value("f32", -0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1111
+assert_return(
+ () => invoke($46, `f32.no_fold_ge_if_to_abs`, [bytes("f32", [0x0, 0x0, 0xa0, 0x7f])]),
+ [bytes("f32", [0x0, 0x0, 0xa0, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1112
+assert_return(
+ () => invoke($46, `f32.no_fold_ge_if_to_abs`, [bytes("f32", [0x0, 0x0, 0xc0, 0xff])]),
+ [bytes("f32", [0x0, 0x0, 0xc0, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1113
+assert_return(() => invoke($46, `f32.no_fold_ge_if_to_abs`, [value("f32", 0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1114
+assert_return(() => invoke($46, `f32.no_fold_ge_if_to_abs`, [value("f32", -0)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:1115
+assert_return(
+ () => invoke($46, `f64.no_fold_lt_if_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1116
+assert_return(
+ () => invoke($46, `f64.no_fold_lt_if_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1117
+assert_return(() => invoke($46, `f64.no_fold_lt_if_to_abs`, [value("f64", 0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1118
+assert_return(() => invoke($46, `f64.no_fold_lt_if_to_abs`, [value("f64", -0)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:1119
+assert_return(
+ () => invoke($46, `f64.no_fold_le_if_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1120
+assert_return(
+ () => invoke($46, `f64.no_fold_le_if_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1121
+assert_return(() => invoke($46, `f64.no_fold_le_if_to_abs`, [value("f64", 0)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:1122
+assert_return(() => invoke($46, `f64.no_fold_le_if_to_abs`, [value("f64", -0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1123
+assert_return(
+ () => invoke($46, `f64.no_fold_gt_if_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1124
+assert_return(
+ () => invoke($46, `f64.no_fold_gt_if_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1125
+assert_return(() => invoke($46, `f64.no_fold_gt_if_to_abs`, [value("f64", 0)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:1126
+assert_return(() => invoke($46, `f64.no_fold_gt_if_to_abs`, [value("f64", -0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1127
+assert_return(
+ () => invoke($46, `f64.no_fold_ge_if_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0x7f]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf4, 0xff])],
+);
+
+// ./test/core/float_exprs.wast:1128
+assert_return(
+ () => invoke($46, `f64.no_fold_ge_if_to_abs`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0xff]),
+ ]),
+ [bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f])],
+);
+
+// ./test/core/float_exprs.wast:1129
+assert_return(() => invoke($46, `f64.no_fold_ge_if_to_abs`, [value("f64", 0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1130
+assert_return(() => invoke($46, `f64.no_fold_ge_if_to_abs`, [value("f64", -0)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:1135
+let $47 = instantiate(`(module
+ (func (export "f32.incorrect_correction") (result f32)
+ (f32.sub (f32.sub (f32.add (f32.const 1.333) (f32.const 1.225)) (f32.const 1.333)) (f32.const 1.225))
+ )
+ (func (export "f64.incorrect_correction") (result f64)
+ (f64.sub (f64.sub (f64.add (f64.const 1.333) (f64.const 1.225)) (f64.const 1.333)) (f64.const 1.225))
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1144
+assert_return(() => invoke($47, `f32.incorrect_correction`, []), [value("f32", 0.00000011920929)]);
+
+// ./test/core/float_exprs.wast:1145
+assert_return(
+ () => invoke($47, `f64.incorrect_correction`, []),
+ [value("f64", -0.0000000000000002220446049250313)],
+);
+
+// ./test/core/float_exprs.wast:1150
+let $48 = instantiate(`(module
+ (func (export "calculate") (result f32)
+ (local $$x f32)
+ (local $$r f32)
+ (local $$q f32)
+ (local $$z0 f32)
+ (local $$z1 f32)
+ (local.set $$x (f32.const 156.25))
+ (local.set $$r (f32.const 208.333333334))
+ (local.set $$q (f32.const 1.77951304201))
+ (local.set $$z0 (f32.div (f32.mul (f32.neg (local.get $$r)) (local.get $$x)) (f32.sub (f32.mul (local.get $$x) (local.get $$q)) (local.get $$r))))
+ (local.set $$z1 (f32.div (f32.mul (f32.neg (local.get $$r)) (local.get $$x)) (f32.sub (f32.mul (local.get $$x) (local.get $$q)) (local.get $$r))))
+ (block (br_if 0 (f32.eq (local.get $$z0) (local.get $$z1))) (unreachable))
+ (local.get $$z1)
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1167
+assert_return(() => invoke($48, `calculate`, []), [value("f32", -466.92685)]);
+
+// ./test/core/float_exprs.wast:1169
+let $49 = instantiate(`(module
+ (func (export "calculate") (result f64)
+ (local $$x f64)
+ (local $$r f64)
+ (local $$q f64)
+ (local $$z0 f64)
+ (local $$z1 f64)
+ (local.set $$x (f64.const 156.25))
+ (local.set $$r (f64.const 208.333333334))
+ (local.set $$q (f64.const 1.77951304201))
+ (local.set $$z0 (f64.div (f64.mul (f64.neg (local.get $$r)) (local.get $$x)) (f64.sub (f64.mul (local.get $$x) (local.get $$q)) (local.get $$r))))
+ (local.set $$z1 (f64.div (f64.mul (f64.neg (local.get $$r)) (local.get $$x)) (f64.sub (f64.mul (local.get $$x) (local.get $$q)) (local.get $$r))))
+ (block (br_if 0 (f64.eq (local.get $$z0) (local.get $$z1))) (unreachable))
+ (local.get $$z1)
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1186
+assert_return(() => invoke($49, `calculate`, []), [value("f64", -466.926956301738)]);
+
+// ./test/core/float_exprs.wast:1191
+let $50 = instantiate(`(module
+ (func (export "llvm_pr26746") (param $$x f32) (result f32)
+ (f32.sub (f32.const 0.0) (f32.sub (f32.const -0.0) (local.get $$x)))
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1197
+assert_return(() => invoke($50, `llvm_pr26746`, [value("f32", -0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1202
+let $51 = instantiate(`(module
+ (func (export "llvm_pr27153") (param $$x i32) (result f32)
+ (f32.add (f32.convert_i32_s (i32.and (local.get $$x) (i32.const 268435455))) (f32.const -8388608.0))
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1208
+assert_return(() => invoke($51, `llvm_pr27153`, [33554434]), [value("f32", 25165824)]);
+
+// ./test/core/float_exprs.wast:1213
+let $52 = instantiate(`(module
+ (func (export "llvm_pr27036") (param $$x i32) (param $$y i32) (result f32)
+ (f32.add (f32.convert_i32_s (i32.or (local.get $$x) (i32.const -25034805)))
+ (f32.convert_i32_s (i32.and (local.get $$y) (i32.const 14942208))))
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1220
+assert_return(() => invoke($52, `llvm_pr27036`, [-25034805, 14942208]), [value("f32", -10092596)]);
+
+// ./test/core/float_exprs.wast:1230
+let $53 = instantiate(`(module
+ (func (export "thepast0") (param $$a f64) (param $$b f64) (param $$c f64) (param $$d f64) (result f64)
+ (f64.div (f64.mul (local.get $$a) (local.get $$b)) (f64.mul (local.get $$c) (local.get $$d)))
+ )
+
+ (func (export "thepast1") (param $$a f64) (param $$b f64) (param $$c f64) (result f64)
+ (f64.sub (f64.mul (local.get $$a) (local.get $$b)) (local.get $$c))
+ )
+
+ (func (export "thepast2") (param $$a f32) (param $$b f32) (param $$c f32) (result f32)
+ (f32.mul (f32.mul (local.get $$a) (local.get $$b)) (local.get $$c))
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1244
+assert_return(
+ () => invoke($53, `thepast0`, [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004450147717014403),
+ value("f64", 0.9999999999999999),
+ value("f64", 2),
+ value("f64", 0.5),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044501477170144023),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1245
+assert_return(
+ () => invoke($53, `thepast1`, [
+ value("f64", 0.00000000000000005551115123125783),
+ value("f64", 0.9999999999999999),
+ value("f64", 0.00000000000000005551115123125783),
+ ]),
+ [value("f64", -0.000000000000000000000000000000006162975822039155)],
+);
+
+// ./test/core/float_exprs.wast:1246
+assert_return(
+ () => invoke($53, `thepast2`, [
+ value("f32", 0.000000000000000000000000000000000000023509887),
+ value("f32", 0.5),
+ value("f32", 1),
+ ]),
+ [value("f32", 0.000000000000000000000000000000000000011754944)],
+);
+
+// ./test/core/float_exprs.wast:1251
+let $54 = instantiate(`(module
+ (func (export "inverse") (param $$x f32) (result f32)
+ (f32.div (f32.const 1.0) (local.get $$x))
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1257
+assert_return(() => invoke($54, `inverse`, [value("f32", 96)]), [value("f32", 0.010416667)]);
+
+// ./test/core/float_exprs.wast:1262
+let $55 = instantiate(`(module
+ (func (export "f32_sqrt_minus_2") (param $$x f32) (result f32)
+ (f32.sub (f32.sqrt (local.get $$x)) (f32.const 2.0))
+ )
+
+ (func (export "f64_sqrt_minus_2") (param $$x f64) (result f64)
+ (f64.sub (f64.sqrt (local.get $$x)) (f64.const 2.0))
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1272
+assert_return(() => invoke($55, `f32_sqrt_minus_2`, [value("f32", 4)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1273
+assert_return(() => invoke($55, `f64_sqrt_minus_2`, [value("f64", 4)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1277
+let $56 = instantiate(`(module
+ (func (export "f32.no_fold_recip_recip") (param $$x f32) (result f32)
+ (f32.div (f32.const 1.0) (f32.div (f32.const 1.0) (local.get $$x))))
+
+ (func (export "f64.no_fold_recip_recip") (param $$x f64) (result f64)
+ (f64.div (f64.const 1.0) (f64.div (f64.const 1.0) (local.get $$x))))
+)`);
+
+// ./test/core/float_exprs.wast:1285
+assert_return(
+ () => invoke($56, `f32.no_fold_recip_recip`, [value("f32", -70435790000000000000)]),
+ [value("f32", -70435784000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1286
+assert_return(
+ () => invoke($56, `f32.no_fold_recip_recip`, [
+ value("f32", 0.000000000000000000000012466101),
+ ]),
+ [value("f32", 0.0000000000000000000000124661)],
+);
+
+// ./test/core/float_exprs.wast:1287
+assert_return(
+ () => invoke($56, `f32.no_fold_recip_recip`, [
+ value("f32", 0.000000000000000000097184545),
+ ]),
+ [value("f32", 0.00000000000000000009718455)],
+);
+
+// ./test/core/float_exprs.wast:1288
+assert_return(
+ () => invoke($56, `f32.no_fold_recip_recip`, [value("f32", -30.400759)]),
+ [value("f32", -30.40076)],
+);
+
+// ./test/core/float_exprs.wast:1289
+assert_return(
+ () => invoke($56, `f32.no_fold_recip_recip`, [value("f32", 2331659200000000000000)]),
+ [value("f32", 2331659000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1291
+assert_return(() => invoke($56, `f32.no_fold_recip_recip`, [value("f32", -0)]), [value("f32", -0)]);
+
+// ./test/core/float_exprs.wast:1292
+assert_return(() => invoke($56, `f32.no_fold_recip_recip`, [value("f32", 0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1293
+assert_return(
+ () => invoke($56, `f32.no_fold_recip_recip`, [value("f32", -Infinity)]),
+ [value("f32", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1294
+assert_return(
+ () => invoke($56, `f32.no_fold_recip_recip`, [value("f32", Infinity)]),
+ [value("f32", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1296
+assert_return(
+ () => invoke($56, `f64.no_fold_recip_recip`, [
+ value("f64", -657971534362886860000000000000000000000000000),
+ ]),
+ [value("f64", -657971534362886900000000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1297
+assert_return(
+ () => invoke($56, `f64.no_fold_recip_recip`, [value("f64", -144246931868576430000)]),
+ [value("f64", -144246931868576420000)],
+);
+
+// ./test/core/float_exprs.wast:1298
+assert_return(
+ () => invoke($56, `f64.no_fold_recip_recip`, [
+ value("f64", 184994689206231350000000000000000000000000000000000),
+ ]),
+ [value("f64", 184994689206231330000000000000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1299
+assert_return(
+ () => invoke($56, `f64.no_fold_recip_recip`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005779584288006583),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005779584288006582),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1300
+assert_return(
+ () => invoke($56, `f64.no_fold_recip_recip`, [
+ value("f64", 51501178696141640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 51501178696141634000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1302
+assert_return(() => invoke($56, `f64.no_fold_recip_recip`, [value("f64", -0)]), [value("f64", -0)]);
+
+// ./test/core/float_exprs.wast:1303
+assert_return(() => invoke($56, `f64.no_fold_recip_recip`, [value("f64", 0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1304
+assert_return(
+ () => invoke($56, `f64.no_fold_recip_recip`, [value("f64", -Infinity)]),
+ [value("f64", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1305
+assert_return(
+ () => invoke($56, `f64.no_fold_recip_recip`, [value("f64", Infinity)]),
+ [value("f64", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1309
+let $57 = instantiate(`(module
+ (func (export "f32.no_algebraic_factoring") (param $$x f32) (param $$y f32) (result f32)
+ (f32.mul (f32.add (local.get $$x) (local.get $$y))
+ (f32.sub (local.get $$x) (local.get $$y))))
+
+ (func (export "f64.no_algebraic_factoring") (param $$x f64) (param $$y f64) (result f64)
+ (f64.mul (f64.add (local.get $$x) (local.get $$y))
+ (f64.sub (local.get $$x) (local.get $$y))))
+)`);
+
+// ./test/core/float_exprs.wast:1319
+assert_return(
+ () => invoke($57, `f32.no_algebraic_factoring`, [
+ value("f32", -0.000000000000000053711865),
+ value("f32", 0.00000000000000009744328),
+ ]),
+ [value("f32", -0.000000000000000000000000000000006610229)],
+);
+
+// ./test/core/float_exprs.wast:1320
+assert_return(
+ () => invoke($57, `f32.no_algebraic_factoring`, [
+ value("f32", -19756732),
+ value("f32", 32770204),
+ ]),
+ [value("f32", -683557800000000)],
+);
+
+// ./test/core/float_exprs.wast:1321
+assert_return(
+ () => invoke($57, `f32.no_algebraic_factoring`, [
+ value("f32", 52314150000000),
+ value("f32", -145309980000000),
+ ]),
+ [value("f32", -18378221000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1322
+assert_return(
+ () => invoke($57, `f32.no_algebraic_factoring`, [
+ value("f32", 195260.38),
+ value("f32", -227.75723),
+ ]),
+ [value("f32", 38126563000)],
+);
+
+// ./test/core/float_exprs.wast:1323
+assert_return(
+ () => invoke($57, `f32.no_algebraic_factoring`, [
+ value("f32", -237.48706),
+ value("f32", -972341.5),
+ ]),
+ [value("f32", -945447960000)],
+);
+
+// ./test/core/float_exprs.wast:1325
+assert_return(
+ () => invoke($57, `f64.no_algebraic_factoring`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009639720335949767),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008019175443606207),
+ ]),
+ [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006430717386609473),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1326
+assert_return(
+ () => invoke($57, `f64.no_algebraic_factoring`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005166066590392027),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001494333315888213),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026688244016362468),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1327
+assert_return(
+ () => invoke($57, `f64.no_algebraic_factoring`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002866135870517635),
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012114355254268516),
+ ]),
+ [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014675678175314036),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1328
+assert_return(
+ () => invoke($57, `f64.no_algebraic_factoring`, [
+ value("f64", -1292099281007814900000000000000000000000000000000000000),
+ value("f64", 662717187728034000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -439192401389602300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1329
+assert_return(
+ () => invoke($57, `f64.no_algebraic_factoring`, [
+ value("f64", 26242795689010570000000000000000000),
+ value("f64", -1625023398605080200000000000),
+ ]),
+ [
+ value("f64", 688684325575149100000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1333
+let $58 = instantiate(`(module
+ (func (export "f32.no_algebraic_factoring") (param $$x f32) (param $$y f32) (result f32)
+ (f32.sub (f32.mul (local.get $$x) (local.get $$x))
+ (f32.mul (local.get $$y) (local.get $$y))))
+
+ (func (export "f64.no_algebraic_factoring") (param $$x f64) (param $$y f64) (result f64)
+ (f64.sub (f64.mul (local.get $$x) (local.get $$x))
+ (f64.mul (local.get $$y) (local.get $$y))))
+)`);
+
+// ./test/core/float_exprs.wast:1343
+assert_return(
+ () => invoke($58, `f32.no_algebraic_factoring`, [
+ value("f32", 0.000000000000022102996),
+ value("f32", 0.0000000000031465275),
+ ]),
+ [value("f32", -0.0000000000000000000000099001476)],
+);
+
+// ./test/core/float_exprs.wast:1344
+assert_return(
+ () => invoke($58, `f32.no_algebraic_factoring`, [
+ value("f32", -3289460800000),
+ value("f32", -15941539000),
+ ]),
+ [value("f32", 10820299000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1345
+assert_return(
+ () => invoke($58, `f32.no_algebraic_factoring`, [
+ value("f32", 0.00036497542),
+ value("f32", -0.00016153714),
+ ]),
+ [value("f32", 0.000000107112804)],
+);
+
+// ./test/core/float_exprs.wast:1346
+assert_return(
+ () => invoke($58, `f32.no_algebraic_factoring`, [
+ value("f32", 0.000000000000065383266),
+ value("f32", -0.000000000000027412773),
+ ]),
+ [value("f32", 0.000000000000000000000000003523511)],
+);
+
+// ./test/core/float_exprs.wast:1347
+assert_return(
+ () => invoke($58, `f32.no_algebraic_factoring`, [
+ value("f32", 3609682000000000),
+ value("f32", -5260104400000000),
+ ]),
+ [value("f32", -14638896000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1349
+assert_return(
+ () => invoke($58, `f64.no_algebraic_factoring`, [
+ value("f64", 213640454349895100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -292858755839442800000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 45642243734743850000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1350
+assert_return(
+ () => invoke($58, `f64.no_algebraic_factoring`, [
+ value("f64", -1229017115924435800000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -8222158919016600000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -67603897289562710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1351
+assert_return(
+ () => invoke($58, `f64.no_algebraic_factoring`, [
+ value("f64", 5477733829752.252),
+ value("f64", -970738900948.5906),
+ ]),
+ [value("f64", 29063233895797397000000000)],
+);
+
+// ./test/core/float_exprs.wast:1352
+assert_return(
+ () => invoke($58, `f64.no_algebraic_factoring`, [
+ value("f64", -10689141744923551000000000000000000000000000000000000000),
+ value("f64", -173378393593738040000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 114257751213007240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1353
+assert_return(
+ () => invoke($58, `f64.no_algebraic_factoring`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000010295699877022106),
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000008952274637805908),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025858214767010105),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1358
+let $59 = instantiate(`(module
+ (memory (data
+ "\\01\\00\\00\\00\\01\\00\\00\\80\\01\\00\\00\\00\\01\\00\\00\\80"
+ "\\01\\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\\00\\00\\00\\00"
+ ))
+
+ (func (export "f32.simple_x4_sum")
+ (param $$i i32)
+ (param $$j i32)
+ (param $$k i32)
+ (local $$x0 f32) (local $$x1 f32) (local $$x2 f32) (local $$x3 f32)
+ (local $$y0 f32) (local $$y1 f32) (local $$y2 f32) (local $$y3 f32)
+ (local.set $$x0 (f32.load offset=0 (local.get $$i)))
+ (local.set $$x1 (f32.load offset=4 (local.get $$i)))
+ (local.set $$x2 (f32.load offset=8 (local.get $$i)))
+ (local.set $$x3 (f32.load offset=12 (local.get $$i)))
+ (local.set $$y0 (f32.load offset=0 (local.get $$j)))
+ (local.set $$y1 (f32.load offset=4 (local.get $$j)))
+ (local.set $$y2 (f32.load offset=8 (local.get $$j)))
+ (local.set $$y3 (f32.load offset=12 (local.get $$j)))
+ (f32.store offset=0 (local.get $$k) (f32.add (local.get $$x0) (local.get $$y0)))
+ (f32.store offset=4 (local.get $$k) (f32.add (local.get $$x1) (local.get $$y1)))
+ (f32.store offset=8 (local.get $$k) (f32.add (local.get $$x2) (local.get $$y2)))
+ (f32.store offset=12 (local.get $$k) (f32.add (local.get $$x3) (local.get $$y3)))
+ )
+
+ (func (export "f32.load")
+ (param $$k i32) (result f32)
+ (f32.load (local.get $$k))
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1391
+assert_return(() => invoke($59, `f32.simple_x4_sum`, [0, 16, 32]), []);
+
+// ./test/core/float_exprs.wast:1392
+assert_return(
+ () => invoke($59, `f32.load`, [32]),
+ [value("f32", 0.000000000000000000000000000000000000000000003)],
+);
+
+// ./test/core/float_exprs.wast:1393
+assert_return(() => invoke($59, `f32.load`, [36]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1394
+assert_return(
+ () => invoke($59, `f32.load`, [40]),
+ [value("f32", 0.000000000000000000000000000000000000000000001)],
+);
+
+// ./test/core/float_exprs.wast:1395
+assert_return(
+ () => invoke($59, `f32.load`, [44]),
+ [value("f32", -0.000000000000000000000000000000000000000000001)],
+);
+
+// ./test/core/float_exprs.wast:1397
+let $60 = instantiate(`(module
+ (memory (data
+ "\\01\\00\\00\\00\\00\\00\\00\\00\\01\\00\\00\\00\\00\\00\\00\\80\\01\\00\\00\\00\\00\\00\\00\\00\\01\\00\\00\\00\\00\\00\\00\\80"
+ "\\01\\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"
+ "\\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"
+ ))
+
+ (func (export "f64.simple_x4_sum")
+ (param $$i i32)
+ (param $$j i32)
+ (param $$k i32)
+ (local $$x0 f64) (local $$x1 f64) (local $$x2 f64) (local $$x3 f64)
+ (local $$y0 f64) (local $$y1 f64) (local $$y2 f64) (local $$y3 f64)
+ (local.set $$x0 (f64.load offset=0 (local.get $$i)))
+ (local.set $$x1 (f64.load offset=8 (local.get $$i)))
+ (local.set $$x2 (f64.load offset=16 (local.get $$i)))
+ (local.set $$x3 (f64.load offset=24 (local.get $$i)))
+ (local.set $$y0 (f64.load offset=0 (local.get $$j)))
+ (local.set $$y1 (f64.load offset=8 (local.get $$j)))
+ (local.set $$y2 (f64.load offset=16 (local.get $$j)))
+ (local.set $$y3 (f64.load offset=24 (local.get $$j)))
+ (f64.store offset=0 (local.get $$k) (f64.add (local.get $$x0) (local.get $$y0)))
+ (f64.store offset=8 (local.get $$k) (f64.add (local.get $$x1) (local.get $$y1)))
+ (f64.store offset=16 (local.get $$k) (f64.add (local.get $$x2) (local.get $$y2)))
+ (f64.store offset=24 (local.get $$k) (f64.add (local.get $$x3) (local.get $$y3)))
+ )
+
+ (func (export "f64.load")
+ (param $$k i32) (result f64)
+ (f64.load (local.get $$k))
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1430
+assert_return(() => invoke($60, `f64.simple_x4_sum`, [0, 32, 64]), []);
+
+// ./test/core/float_exprs.wast:1431
+assert_return(
+ () => invoke($60, `f64.load`, [64]),
+ [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1432
+assert_return(() => invoke($60, `f64.load`, [72]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1433
+assert_return(
+ () => invoke($60, `f64.load`, [80]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1434
+assert_return(
+ () => invoke($60, `f64.load`, [88]),
+ [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1439
+let $61 = instantiate(`(module
+ (memory (data
+ "\\c4\\c5\\57\\24\\a5\\84\\c8\\0b\\6d\\b8\\4b\\2e\\f2\\76\\17\\1c\\ca\\4a\\56\\1e\\1b\\6e\\71\\22"
+ "\\5d\\17\\1e\\6e\\bf\\cd\\14\\5c\\c7\\21\\55\\51\\39\\9c\\1f\\b2\\51\\f0\\a3\\93\\d7\\c1\\2c\\ae"
+ "\\7e\\a8\\28\\3a\\01\\21\\f4\\0a\\58\\93\\f8\\42\\77\\9f\\83\\39\\6a\\5f\\ba\\f7\\0a\\d8\\51\\6a"
+ "\\34\\ca\\ad\\c6\\34\\0e\\d8\\26\\dc\\4c\\33\\1c\\ed\\29\\90\\a8\\78\\0f\\d1\\ce\\76\\31\\23\\83"
+ "\\b8\\35\\e8\\f2\\44\\b0\\d3\\a1\\fc\\bb\\32\\e1\\b0\\ba\\69\\44\\09\\d6\\d9\\7d\\ff\\2e\\c0\\5a"
+ "\\36\\14\\33\\14\\3e\\a9\\fa\\87\\6d\\8b\\bc\\ce\\9d\\a7\\fd\\c4\\e9\\85\\3f\\dd\\d7\\e1\\18\\a6"
+ "\\50\\26\\72\\6e\\3f\\73\\0f\\f8\\12\\93\\23\\34\\61\\76\\12\\48\\c0\\9b\\05\\93\\eb\\ac\\86\\de"
+ "\\94\\3e\\55\\e8\\8c\\e8\\dd\\e4\\fc\\95\\47\\be\\56\\03\\21\\20\\4c\\e6\\bf\\7b\\f6\\7f\\d5\\ba"
+ "\\73\\1c\\c1\\14\\8f\\c4\\27\\96\\b3\\bd\\33\\ff\\78\\41\\5f\\c0\\5a\\ce\\f6\\67\\6e\\73\\9a\\17"
+ "\\66\\70\\03\\f8\\ce\\27\\a3\\52\\b2\\9f\\3b\\bf\\fb\\ae\\ed\\d3\\5a\\f8\\37\\57\\f0\\f5\\6e\\ef"
+ "\\b1\\4d\\70\\3d\\54\\a7\\01\\9a\\85\\08\\48\\91\\f5\\9d\\0c\\60\\87\\5b\\d9\\54\\1e\\51\\6d\\88"
+ "\\8e\\08\\8c\\a5\\71\\3a\\56\\08\\67\\46\\8f\\8f\\13\\2a\\2c\\ec\\2c\\1f\\b4\\62\\2b\\6f\\41\\0a"
+ "\\c4\\65\\42\\a2\\31\\6b\\2c\\7d\\3e\\bb\\75\\ac\\86\\97\\30\\d9\\48\\cd\\9a\\1f\\56\\c4\\c6\\e4"
+ "\\12\\c0\\9d\\fb\\ee\\02\\8c\\ce\\1c\\f2\\1e\\a1\\78\\23\\db\\c4\\1e\\49\\03\\d3\\71\\cc\\08\\50"
+ "\\c5\\d8\\5c\\ed\\d5\\b5\\65\\ac\\b5\\c9\\21\\d2\\c9\\29\\76\\de\\f0\\30\\1a\\5b\\3c\\f2\\3b\\db"
+ "\\3a\\39\\82\\3a\\16\\08\\6f\\a8\\f1\\be\\69\\69\\99\\71\\a6\\05\\d3\\14\\93\\2a\\16\\f2\\2f\\11"
+ "\\c7\\7e\\20\\bb\\91\\44\\ee\\f8\\e4\\01\\53\\c0\\b9\\7f\\f0\\bf\\f0\\03\\9c\\6d\\b1\\df\\a2\\44"
+ "\\01\\6d\\6b\\71\\2b\\5c\\b3\\21\\19\\46\\5e\\8f\\db\\91\\d3\\7c\\78\\6b\\b7\\12\\00\\8f\\eb\\bd"
+ "\\8a\\f5\\d4\\2e\\c4\\c1\\1e\\df\\73\\63\\59\\47\\49\\03\\0a\\b7\\cf\\24\\cf\\9c\\0e\\44\\7a\\9e"
+ "\\14\\fb\\42\\bf\\9d\\39\\30\\9e\\a0\\ab\\2f\\d1\\ae\\9e\\6a\\83\\43\\e3\\55\\7d\\85\\bf\\63\\8a"
+ "\\f8\\96\\10\\1f\\fe\\6d\\e7\\22\\1b\\e1\\69\\46\\8a\\44\\c8\\c8\\f9\\0c\\2b\\19\\07\\a5\\02\\3e"
+ "\\f2\\30\\10\\9a\\85\\8a\\5f\\ef\\81\\45\\a0\\77\\b1\\03\\10\\73\\4b\\ae\\98\\9d\\47\\bf\\9a\\2d"
+ "\\3a\\d5\\0f\\03\\66\\e3\\3d\\53\\d9\\40\\ce\\1f\\6f\\32\\2f\\21\\2b\\23\\21\\6c\\62\\d4\\a7\\3e"
+ "\\a8\\ce\\28\\31\\2d\\00\\3d\\67\\5e\\af\\a0\\cf\\2e\\d2\\b9\\6b\\84\\eb\\69\\08\\3c\\62\\36\\be"
+ "\\12\\fd\\36\\7f\\88\\3e\\ad\\bc\\0b\\c0\\41\\c4\\50\\b6\\e3\\50\\31\\e8\\ce\\e2\\96\\65\\55\\9c"
+ "\\16\\46\\e6\\b0\\2d\\3a\\e8\\81\\05\\b0\\bf\\34\\f7\\bc\\10\\1c\\fb\\cc\\3c\\f1\\85\\97\\42\\9f"
+ "\\eb\\14\\8d\\3c\\bf\\d7\\17\\88\\49\\9d\\8b\\2b\\b2\\3a\\83\\d1\\4f\\04\\9e\\a1\\0f\\ad\\08\\9d"
+ "\\54\\af\\d1\\82\\c3\\ec\\32\\2f\\02\\8f\\05\\21\\2d\\a2\\b7\\e4\\f4\\6f\\2e\\81\\2b\\0b\\9c\\fc"
+ "\\cb\\fe\\74\\02\\f9\\db\\f4\\f3\\ea\\00\\a8\\ec\\d1\\99\\74\\26\\dd\\d6\\34\\d5\\25\\b1\\46\\dd"
+ "\\9c\\aa\\71\\f5\\60\\b0\\88\\c8\\e0\\0b\\59\\5a\\25\\4f\\29\\66\\f9\\e3\\2e\\fe\\e9\\da\\e5\\18"
+ "\\4f\\27\\62\\f4\\ce\\a4\\21\\95\\74\\c7\\57\\64\\27\\9a\\4c\\fd\\54\\7d\\61\\ce\\c3\\ac\\87\\46"
+ "\\9c\\fa\\ff\\09\\ca\\79\\97\\67\\24\\74\\ca\\d4\\21\\83\\26\\25\\19\\12\\37\\64\\19\\e5\\65\\e0"
+ "\\74\\75\\8e\\dd\\c8\\ef\\74\\c7\\d8\\21\\2b\\79\\04\\51\\46\\65\\60\\03\\5d\\fa\\d8\\f4\\65\\a4"
+ "\\9e\\5d\\23\\da\\d7\\8a\\92\\80\\a4\\de\\78\\3c\\f1\\57\\42\\6d\\cd\\c9\\2f\\d5\\a4\\9e\\ab\\40"
+ "\\f4\\cb\\1b\\d7\\a3\\ca\\fc\\eb\\a7\\01\\b2\\9a\\69\\4e\\46\\9b\\18\\4e\\dd\\79\\a7\\aa\\a6\\52"
+ "\\39\\1e\\ef\\30\\cc\\9b\\bd\\5b\\ee\\4c\\21\\6d\\30\\00\\72\\b0\\46\\5f\\08\\cf\\c5\\b9\\e0\\3e"
+ "\\c2\\b3\\0c\\dc\\8e\\64\\de\\19\\42\\79\\cf\\43\\ea\\43\\5d\\8e\\88\\f7\\ab\\15\\dc\\3f\\c8\\67"
+ "\\20\\db\\b8\\64\\b1\\47\\1f\\de\\f2\\cb\\3f\\59\\9f\\d8\\46\\90\\dc\\ae\\2f\\22\\f9\\e2\\31\\89"
+ "\\d9\\9c\\1c\\4c\\d3\\a9\\4a\\57\\84\\9c\\9f\\ea\\2c\\3c\\ae\\3c\\c3\\1e\\8b\\e5\\4e\\17\\01\\25"
+ "\\db\\34\\46\\5f\\15\\ea\\05\\0c\\7c\\d9\\45\\8c\\19\\d0\\73\\8a\\96\\16\\dd\\44\\f9\\05\\b7\\5b"
+ "\\71\\b0\\e6\\21\\36\\5f\\75\\89\\91\\73\\75\\ab\\7d\\ae\\d3\\73\\ec\\37\\c6\\ea\\55\\75\\ef\\ea"
+ "\\ab\\8b\\7b\\11\\dc\\6d\\1a\\b2\\6a\\c4\\25\\cf\\aa\\e3\\9f\\49\\49\\89\\cb\\37\\9b\\0a\\a7\\01"
+ "\\60\\70\\dc\\b7\\c8\\83\\e1\\42\\f5\\be\\ad\\62\\94\\ad\\8d\\a1"
+ ))
+
+ (func (export "f32.kahan_sum") (param $$p i32) (param $$n i32) (result f32)
+ (local $$sum f32)
+ (local $$c f32)
+ (local $$t f32)
+ (block $$exit
+ (loop $$top
+ (local.set $$t
+ (f32.sub
+ (f32.sub
+ (local.tee $$sum
+ (f32.add
+ (local.get $$c)
+ (local.tee $$t
+ (f32.sub (f32.load (local.get $$p)) (local.get $$t))
+ )
+ )
+ )
+ (local.get $$c)
+ )
+ (local.get $$t)
+ )
+ )
+ (local.set $$p (i32.add (local.get $$p) (i32.const 4)))
+ (local.set $$c (local.get $$sum))
+ (br_if $$top (local.tee $$n (i32.add (local.get $$n) (i32.const -1))))
+ )
+ )
+ (local.get $$sum)
+ )
+
+ (func (export "f32.plain_sum") (param $$p i32) (param $$n i32) (result f32)
+ (local $$sum f32)
+ (block $$exit
+ (loop $$top
+ (local.set $$sum (f32.add (local.get $$sum) (f32.load (local.get $$p))))
+ (local.set $$p (i32.add (local.get $$p) (i32.const 4)))
+ (local.set $$n (i32.add (local.get $$n) (i32.const -1)))
+ (br_if $$top (local.get $$n))
+ )
+ )
+ (local.get $$sum)
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1530
+assert_return(
+ () => invoke($61, `f32.kahan_sum`, [0, 256]),
+ [value("f32", -21558138000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1531
+assert_return(
+ () => invoke($61, `f32.plain_sum`, [0, 256]),
+ [value("f32", -16487540000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1533
+let $62 = instantiate(`(module
+ (memory (data "\\13\\05\\84\\42\\5d\\a2\\2c\\c6\\43\\db\\55\\a9\\cd\\da\\55\\e3\\73\\fc\\58\\d6\\ba\\d5\\00\\fd\\83\\35\\42\\88\\8b\\13\\5d\\38\\4a\\47\\0d\\72\\73\\a1\\1a\\ef\\c4\\45\\17\\57\\d8\\c9\\46\\e0\\8d\\6c\\e1\\37\\70\\c8\\83\\5b\\55\\5e\\5a\\2d\\73\\1e\\56\\c8\\e1\\6d\\69\\14\\78\\0a\\8a\\5a\\64\\3a\\09\\c7\\a8\\87\\c5\\f0\\d3\\5d\\e6\\03\\fc\\93\\be\\26\\ca\\d6\\a9\\91\\60\\bd\\b0\\ed\\ae\\f7\\30\\7e\\92\\3a\\6f\\a7\\59\\8e\\aa\\7d\\bf\\67\\58\\2a\\54\\f8\\4e\\fe\\ed\\35\\58\\a6\\51\\bf\\42\\e5\\4b\\66\\27\\24\\6d\\7f\\42\\2d\\28\\92\\18\\ec\\08\\ae\\e7\\55\\da\\b1\\a6\\65\\a5\\72\\50\\47\\1b\\b8\\a9\\54\\d7\\a6\\06\\5b\\0f\\42\\58\\83\\8a\\17\\82\\c6\\10\\43\\a0\\c0\\2e\\6d\\bc\\5a\\85\\53\\72\\7f\\ad\\44\\bc\\30\\3c\\55\\b2\\24\\9a\\74\\3a\\9e\\e1\\d8\\0f\\70\\fc\\a9\\3a\\cd\\93\\4b\\ec\\e3\\7e\\dd\\5d\\27\\cd\\f8\\a0\\9d\\1c\\11\\c0\\57\\2e\\fd\\c8\\13\\32\\cc\\3a\\1a\\7d\\a3\\41\\55\\ed\\c3\\82\\49\\2a\\04\\1e\\ef\\73\\b9\\2e\\2e\\e3\\5f\\f4\\df\\e6\\b2\\33\\0c\\39\\3f\\6f\\44\\6a\\03\\c1\\42\\b9\\fa\\b1\\c8\\ed\\a5\\58\\99\\7f\\ed\\b4\\72\\9e\\79\\eb\\fb\\43\\82\\45\\aa\\bb\\95\\d2\\ff\\28\\9e\\f6\\a1\\ad\\95\\d6\\55\\95\\0d\\6f\\60\\11\\c7\\78\\3e\\49\\f2\\7e\\48\\f4\\a2\\71\\d0\\13\\8e\\b3\\de\\99\\52\\e3\\45\\74\\ea\\76\\0e\\1b\\2a\\c8\\ee\\14\\01\\c4\\50\\5b\\36\\3c\\ef\\ba\\72\\a2\\a6\\08\\f8\\7b\\36\\9d\\f9\\ef\\0b\\c7\\56\\2d\\5c\\f0\\9d\\5d\\de\\fc\\b8\\ad\\0f\\64\\0e\\97\\15\\32\\26\\c2\\31\\e6\\05\\1e\\ef\\cb\\17\\1b\\6d\\15\\0b\\74\\5d\\d3\\2e\\f8\\6b\\86\\b4\\ba\\73\\52\\53\\99\\a9\\76\\20\\45\\c9\\40\\80\\6b\\14\\ed\\a1\\fa\\80\\46\\e6\\26\\d2\\e6\\98\\c4\\57\\bf\\c4\\1c\\a4\\90\\7a\\36\\94\\14\\ba\\15\\89\\6e\\e6\\9c\\37\\8c\\f4\\de\\12\\22\\5d\\a1\\79\\50\\67\\0d\\3d\\7a\\e9\\d4\\aa\\2e\\7f\\2a\\7a\\30\\3d\\ea\\5d\\12\\48\\fe\\e1\\18\\cd\\a4\\57\\a2\\87\\3e\\b6\\9a\\8b\\db\\da\\9d\\78\\9c\\cf\\8d\\b1\\4f\\90\\b4\\34\\e0\\9d\\f6\\ca\\fe\\4c\\3b\\78\\6d\\0a\\5c\\18\\9f\\61\\b9\\dd\\b4\\e0\\0f\\76\\e0\\1b\\69\\0d\\5e\\58\\73\\70\\5e\\0e\\2d\\a1\\7d\\ff\\20\\eb\\91\\34\\92\\ac\\38\\72\\2a\\1f\\8e\\71\\2e\\6a\\f1\\af\\c7\\27\\70\\d9\\c4\\57\\f7\\d2\\3c\\1d\\b8\\f0\\f0\\64\\cf\\dc\\ae\\be\\a3\\cc\\3e\\22\\7d\\4e\\69\\21\\63\\17\\ed\\03\\02\\54\\9a\\0f\\50\\4e\\13\\5a\\35\\a1\\22\\a4\\df\\86\\c2\\74\\79\\16\\b8\\69\\69\\a0\\52\\5d\\11\\64\\bd\\5b\\93\\fc\\69\\a0\\f4\\13\\d0\\81\\51\\dd\\fa\\0c\\15\\c3\\7a\\c9\\62\\7a\\a9\\1d\\c9\\e6\\5a\\b3\\5b\\97\\02\\3c\\64\\22\\12\\3c\\22\\90\\64\\2d\\30\\54\\4c\\b4\\a1\\22\\09\\57\\22\\5e\\8e\\38\\2b\\02\\a8\\ae\\f6\\be\\0d\\2b\\f2\\03\\ad\\fa\\10\\01\\71\\77\\2a\\30\\02\\95\\f6\\00\\3e\\d0\\c4\\8d\\34\\19\\50\\21\\0a\\bc\\50\\da\\3c\\30\\d6\\3a\\31\\94\\8d\\3a\\fe\\ef\\14\\57\\9d\\4b\\93\\00\\96\\24\\0c\\6f\\fd\\bc\\23\\76\\02\\6c\\eb\\52\\72\\80\\11\\7e\\80\\3a\\13\\12\\38\\1d\\38\\49\\95\\40\\27\\8a\\44\\7b\\e8\\dc\\6d\\8c\\8c\\8e\\3c\\b5\\b3\\18\\0e\\f6\\08\\1a\\84\\41\\35\\ff\\8b\\b8\\93\\40\\ea\\e1\\51\\1d\\89\\a5\\8d\\42\\68\\29\\ea\\2f\\c1\\7a\\52\\eb\\90\\5d\\4d\\d6\\80\\e3\\d7\\75\\48\\ce\\ed\\d3\\01\\1c\\8d\\5b\\a5\\94\\0d\\78\\cf\\f1\\06\\13\\2f\\98\\02\\a4\\6d\\2e\\6c\\f2\\d5\\74\\29\\89\\4c\\f9\\03\\f5\\c7\\18\\ad\\7a\\f0\\68\\f8\\5c\\d6\\59\\87\\6e\\d6\\3f\\06\\be\\86\\20\\e3\\41\\91\\22\\f3\\6e\\8b\\f0\\68\\1c\\57\\a7\\fc\\b0\\7c\\9e\\99\\0b\\96\\1a\\89\\5f\\e6\\0d\\7c\\08\\51\\a0\\a2\\67\\9a\\47\\00\\93\\6b\\f9\\28\\f0\\68\\db\\62\\f1\\e0\\65\\2c\\53\\33\\e0\\a7\\ca\\11\\42\\30\\f6\\af\\01\\c1\\65\\3d\\32\\01\\6f\\ab\\2e\\be\\d3\\8b\\be\\14\\c3\\ff\\ec\\fb\\f0\\f9\\c5\\0c\\05\\6f\\01\\09\\6b\\e3\\34\\31\\0c\\1f\\66\\a6\\42\\bc\\1a\\87\\49\\16\\16\\8c\\b0\\90\\0d\\34\\8c\\0a\\e1\\09\\5e\\10\\a4\\6b\\56\\cc\\f0\\c9\\bb\\dc\\b8\\5c\\ce\\f6\\cc\\8d\\75\\7e\\b3\\07\\88\\04\\2f\\b4\\5e\\c9\\e3\\4a\\23\\73\\19\\62\\6c\\9a\\03\\76\\44\\86\\9c\\60\\fc\\db\\72\\8f\\27\\a0\\dd\\b3\\c5\\da\\ff\\f9\\ec\\6a\\b1\\7b\\d3\\cf\\50\\37\\c9\\7a\\78\\0c\\e4\\3a\\b6\\f5\\e6\\f4\\98\\6e\\42\\7d\\35\\73\\8b\\45\\c0\\56\\97\\cd\\6d\\ce\\cf\\ad\\31\\b3\\c3\\54\\fa\\ef\\d5\\c0\\f4\\6a\\5f\\54\\e7\\49\\3e\\33\\0a\\30\\38\\fd\\d9\\05\\ff\\a5\\3f\\57\\46\\14\\b5\\91\\17\\ca\\6b\\98\\23\\7a\\65\\b3\\6c\\02\\b4\\cc\\79\\5d\\58\\d8\\b3\\d5\\94\\ae\\f4\\6d\\75\\65\\f7\\92\\bf\\7e\\47\\4c\\3c\\ee\\db\\ac\\f1\\32\\5d\\fb\\6f\\41\\1c\\34\\c8\\83\\4f\\c2\\58\\01\\be\\05\\3e\\66\\16\\a6\\04\\6d\\5d\\4f\\86\\09\\27\\82\\25\\12\\cd\\3a\\cd\\ce\\6b\\bc\\ca\\ac\\28\\9b\\ee\\6a\\25\\86\\9e\\45\\70\\c6\\d2\\bd\\3b\\7d\\42\\e5\\27\\af\\c7\\1d\\f4\\81\\c8\\b3\\76\\8a\\a8\\36\\a3\\ae\\2a\\e6\\18\\e1\\36\\22\\ad\\f6\\25\\72\\b0\\39\\8b\\01\\9a\\22\\7b\\84\\c3\\2d\\5f\\72\\a4\\98\\ac\\15\\70\\e7\\d4\\18\\e2\\7d\\d2\\30\\7c\\33\\08\\cd\\ca\\c4\\22\\85\\88\\75\\81\\c6\\4a\\74\\58\\8d\\e0\\e8\\ac\\c5\\ab\\75\\5a\\f4\\28\\12\\f0\\18\\45\\52\\f2\\97\\b2\\93\\41\\6f\\8d\\7f\\db\\70\\fb\\a3\\5d\\1f\\a7\\8d\\98\\20\\2b\\22\\9f\\3a\\01\\b5\\8b\\1b\\d2\\cb\\14\\03\\0e\\14\\14\\d2\\19\\5a\\1f\\ce\\5e\\cd\\81\\79\\15\\01\\ca\\de\\73\\74\\8c\\56\\20\\9f\\77\\2d\\25\\16\\f6\\61\\51\\1d\\a4\\8e\\9b\\98\\a5\\c6\\ec\\a8\\45\\57\\82\\59\\78\\0d\\90\\b4\\df\\51\\b0\\c3\\82\\94\\cc\\b3\\53\\09\\15\\6d\\96\\6c\\3a\\40\\47\\b7\\4a\\7a\\05\\2f\\a1\\1e\\8c\\9d\\a0\\20\\88\\fb\\52\\b7\\9f\\f3\\f3\\bb\\5f\\e7\\8a\\61\\a7\\21\\b1\\ac\\fa\\09\\aa\\a4\\6c\\bc\\24\\80\\ba\\2a\\e9\\65\\ff\\70\\ff\\cc\\fa\\65\\87\\76\\f3\\c5\\15\\ce\\cb\\e8\\42\\31\\00\\0c\\91\\57\\d9\\e0\\9d\\35\\54\\24\\ad\\a4\\d8\\f9\\08\\67\\63\\c8\\cf\\81\\dd\\90\\a2\\d7\\c4\\07\\4a\\e6\\10\\6f\\67\\e7\\27\\d4\\23\\59\\18\\f2\\a8\\9d\\5f\\d8\\94\\30\\aa\\54\\86\\4f\\87\\9d\\82\\b5\\26\\ca\\a6\\96\\bf\\cf\\55\\f9\\9d\\37\\01\\19\\48\\43\\c5\\94\\6c\\f3\\74\\97\\58\\4c\\3c\\9d\\08\\e8\\04\\c2\\58\\30\\76\\e1\\a0\\f8\\ea\\e9\\c5\\ae\\cf\\78\\9e\\a9\\0c\\ac\\b3\\44\\42\\e0\\bc\\5d\\1b\\9c\\49\\58\\4a\\1c\\19\\49\\c1\\3a\\ea\\f5\\eb\\3b\\81\\a9\\4b\\70\\0c\\cc\\9e\\1a\\d3\\2f\\b7\\52\\2f\\20\\3b\\eb\\64\\51\\1d\\a0\\2d\\b2\\3e\\be\\13\\85\\48\\92\\32\\2e\\db\\5c\\a1\\e7\\8c\\45\\91\\35\\01\\0a\\93\\c2\\eb\\09\\ce\\f3\\d2\\22\\24\\d0\\8c\\cc\\1d\\9d\\38\\c8\\4d\\e3\\82\\cc\\64\\15\\06\\2d\\e7\\01\\2f\\ab\\bb\\b5\\04\\4c\\92\\1c\\7a\\d6\\3f\\e8\\5f\\31\\15\\0c\\dc\\e4\\31\\b4\\c4\\25\\3e\\2a\\aa\\00\\9e\\c8\\e5\\21\\7a\\7f\\29\\f1\\c0\\af\\1d\\5e\\e8\\63\\39\\ad\\f8\\7e\\6c\\c8\\c5\\7f\\c2\\a8\\97\\27\\0a\\d9\\f4\\21\\6a\\ea\\03\\09\\fb\\f7\\96\\3b\\83\\79\\5f\\7c\\4b\\30\\9f\\56\\35\\de\\b4\\73\\d4\\95\\f0\\14\\c3\\74\\2f\\0d\\a3\\1d\\4e\\8d\\31\\24\\b3\\1a\\84\\85\\62\\5a\\7b\\3c\\14\\39\\17\\e6\\6d\\eb\\37\\c2\\00\\58\\5b\\0b\\e3\\3c\\8a\\62\\e1\\f8\\35\\4b\\56\\e2\\87\\60\\8b\\be\\a7\\38\\91\\77\\54\\a9\\5a\\24\\25\\90\\9f\\a5\\42\\77\\f3\\5c\\39\\df\\ff\\74\\07\\76\\a1\\cd\\1f\\62\\0b\\81\\81\\68\\af\\05\\c1\\c0\\7f\\26\\ee\\c0\\91\\a3\\6a\\7d\\29\\61\\45\\27\\e5\\57\\88\\dc\\0d\\97\\04\\1a\\33\\a9\\44\\8a\\da\\02\\10\\45\\3f\\8e\\55\\a6\\76\\8c\\4d\\e3\\f1\\89\\83\\c8\\d0\\f8\\9b\\50\\77\\9f\\47\\df\\4c\\9c\\66\\0d\\aa\\18\\b8\\5f\\4f\\c4\\01\\ce\\dc\\84\\ac\\46\\9e\\69\\e1\\76\\45\\6b\\61\\89\\e4\\5d\\94\\bb\\11\\83\\9f\\78\\d8\\0a\\d2\\f5\\7e\\5d\\43\\ea\\bc\\10\\f1\\3a\\c9\\e2\\64\\fb\\53\\65\\d0\\c7\\b4\\a7\\fb\\d4\\05\\53\\25\\d0\\cd\\29\\88\\00\\56\\25\\24\\7d\\5d\\b4\\f3\\41\\9f\\e9\\b5\\f7\\ae\\64\\2c\\e3\\c9\\6d\\d5\\84\\3a\\72\\12\\b8\\7a\\d9\\1b\\09\\e8\\38\\da\\26\\4f\\04\\ce\\03\\71\\6e\\8a\\44\\7b\\5c\\81\\59\\9c\\d2\\e4\\c3\\ba\\59\\a6\\e5\\28\\a7\\8f\\9a\\e4\\d5\\4e\\b9\\ca\\7f\\cb\\75\\b8\\2b\\43\\3e\\b3\\15\\46\\b1\\a5\\bc\\9d\\9e\\38\\15\\f1\\bd\\1b\\21\\aa\\f1\\82\\00\\95\\fc\\a7\\77\\47\\39\\a7\\33\\43\\92\\d7\\52\\40\\4b\\06\\81\\8a\\a0\\bd\\f1\\6b\\99\\84\\42\\5b\\e2\\3b\\c5\\5e\\12\\5c\\28\\4d\\b6\\0e\\4e\\c8\\5c\\e8\\01\\8a\\c5\\e7\\e4\\9d\\42\\ee\\5d\\9c\\c4\\eb\\eb\\68\\09\\27\\92\\95\\9a\\11\\54\\73\\c4\\12\\80\\fb\\7d\\fe\\c5\\08\\60\\7f\\36\\41\\e0\\10\\ba\\d6\\2b\\6c\\f1\\b4\\17\\fe\\26\\34\\e3\\4b\\f8\\a8\\e3\\91\\be\\4f\\2a\\fc\\da\\81\\b8\\e7\\fe\\d5\\26\\50\\47\\f3\\1a\\65\\32\\81\\e0\\05\\b8\\4f\\32\\31\\26\\00\\4a\\53\\97\\c2\\c3\\0e\\2e\\a1\\26\\54\\ab\\05\\8e\\56\\2f\\7d\\af\\22\\84\\68\\a5\\8b\\97\\f6\\a4\\fd\\a8\\cc\\75\\41\\96\\86\\fd\\27\\3d\\29\\86\\8d\\7f\\4c\\d4\\8e\\73\\41\\f4\\1e\\e2\\dd\\58\\27\\97\\ce\\9c\\94\\cf\\7a\\04\\2f\\dc\\ed"
+ ))
+
+ (func (export "f64.kahan_sum") (param $$p i32) (param $$n i32) (result f64)
+ (local $$sum f64)
+ (local $$c f64)
+ (local $$t f64)
+ (block $$exit
+ (loop $$top
+ (local.set $$t
+ (f64.sub
+ (f64.sub
+ (local.tee $$sum
+ (f64.add
+ (local.get $$c)
+ (local.tee $$t
+ (f64.sub (f64.load (local.get $$p)) (local.get $$t))
+ )
+ )
+ )
+ (local.get $$c)
+ )
+ (local.get $$t)
+ )
+ )
+ (local.set $$p (i32.add (local.get $$p) (i32.const 8)))
+ (local.set $$c (local.get $$sum))
+ (br_if $$top (local.tee $$n (i32.add (local.get $$n) (i32.const -1))))
+ )
+ )
+ (local.get $$sum)
+ )
+
+ (func (export "f64.plain_sum") (param $$p i32) (param $$n i32) (result f64)
+ (local $$sum f64)
+ (block $$exit
+ (loop $$top
+ (local.set $$sum (f64.add (local.get $$sum) (f64.load (local.get $$p))))
+ (local.set $$p (i32.add (local.get $$p) (i32.const 8)))
+ (local.set $$n (i32.add (local.get $$n) (i32.const -1)))
+ (br_if $$top (local.get $$n))
+ )
+ )
+ (local.get $$sum)
+ )
+)`);
+
+// ./test/core/float_exprs.wast:1581
+assert_return(
+ () => invoke($62, `f64.kahan_sum`, [0, 256]),
+ [
+ value("f64", 4996401743142033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1582
+assert_return(
+ () => invoke($62, `f64.plain_sum`, [0, 256]),
+ [
+ value("f64", 4996401743297957600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1586
+let $63 = instantiate(`(module
+ (func (export "f32.no_fold_neg_sub") (param $$x f32) (param $$y f32) (result f32)
+ (f32.neg (f32.sub (local.get $$x) (local.get $$y))))
+
+ (func (export "f64.no_fold_neg_sub") (param $$x f64) (param $$y f64) (result f64)
+ (f64.neg (f64.sub (local.get $$x) (local.get $$y))))
+)`);
+
+// ./test/core/float_exprs.wast:1594
+assert_return(
+ () => invoke($63, `f32.no_fold_neg_sub`, [value("f32", -0), value("f32", -0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:1595
+assert_return(
+ () => invoke($63, `f32.no_fold_neg_sub`, [value("f32", 0), value("f32", -0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:1596
+assert_return(
+ () => invoke($63, `f32.no_fold_neg_sub`, [value("f32", -0), value("f32", 0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:1597
+assert_return(
+ () => invoke($63, `f32.no_fold_neg_sub`, [value("f32", 0), value("f32", 0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:1599
+assert_return(
+ () => invoke($63, `f64.no_fold_neg_sub`, [value("f64", -0), value("f64", -0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:1600
+assert_return(
+ () => invoke($63, `f64.no_fold_neg_sub`, [value("f64", 0), value("f64", -0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:1601
+assert_return(
+ () => invoke($63, `f64.no_fold_neg_sub`, [value("f64", -0), value("f64", 0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:1602
+assert_return(
+ () => invoke($63, `f64.no_fold_neg_sub`, [value("f64", 0), value("f64", 0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:1606
+let $64 = instantiate(`(module
+ (func (export "f32.no_fold_neg_add") (param $$x f32) (param $$y f32) (result f32)
+ (f32.neg (f32.add (local.get $$x) (local.get $$y))))
+
+ (func (export "f64.no_fold_neg_add") (param $$x f64) (param $$y f64) (result f64)
+ (f64.neg (f64.add (local.get $$x) (local.get $$y))))
+)`);
+
+// ./test/core/float_exprs.wast:1614
+assert_return(
+ () => invoke($64, `f32.no_fold_neg_add`, [value("f32", -0), value("f32", -0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:1615
+assert_return(
+ () => invoke($64, `f32.no_fold_neg_add`, [value("f32", 0), value("f32", -0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:1616
+assert_return(
+ () => invoke($64, `f32.no_fold_neg_add`, [value("f32", -0), value("f32", 0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:1617
+assert_return(
+ () => invoke($64, `f32.no_fold_neg_add`, [value("f32", 0), value("f32", 0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:1619
+assert_return(
+ () => invoke($64, `f64.no_fold_neg_add`, [value("f64", -0), value("f64", -0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:1620
+assert_return(
+ () => invoke($64, `f64.no_fold_neg_add`, [value("f64", 0), value("f64", -0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:1621
+assert_return(
+ () => invoke($64, `f64.no_fold_neg_add`, [value("f64", -0), value("f64", 0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:1622
+assert_return(
+ () => invoke($64, `f64.no_fold_neg_add`, [value("f64", 0), value("f64", 0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:1626
+let $65 = instantiate(`(module
+ (func (export "f32.no_fold_add_neg_neg") (param $$x f32) (param $$y f32) (result f32)
+ (f32.add (f32.neg (local.get $$x)) (f32.neg (local.get $$y))))
+
+ (func (export "f64.no_fold_add_neg_neg") (param $$x f64) (param $$y f64) (result f64)
+ (f64.add (f64.neg (local.get $$x)) (f64.neg (local.get $$y))))
+)`);
+
+// ./test/core/float_exprs.wast:1634
+assert_return(
+ () => invoke($65, `f32.no_fold_add_neg_neg`, [value("f32", -0), value("f32", -0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:1635
+assert_return(
+ () => invoke($65, `f32.no_fold_add_neg_neg`, [value("f32", 0), value("f32", -0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:1636
+assert_return(
+ () => invoke($65, `f32.no_fold_add_neg_neg`, [value("f32", -0), value("f32", 0)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:1637
+assert_return(
+ () => invoke($65, `f32.no_fold_add_neg_neg`, [value("f32", 0), value("f32", 0)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:1639
+assert_return(
+ () => invoke($65, `f64.no_fold_add_neg_neg`, [value("f64", -0), value("f64", -0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:1640
+assert_return(
+ () => invoke($65, `f64.no_fold_add_neg_neg`, [value("f64", 0), value("f64", -0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:1641
+assert_return(
+ () => invoke($65, `f64.no_fold_add_neg_neg`, [value("f64", -0), value("f64", 0)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:1642
+assert_return(
+ () => invoke($65, `f64.no_fold_add_neg_neg`, [value("f64", 0), value("f64", 0)]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:1646
+let $66 = instantiate(`(module
+ (func (export "f32.no_fold_add_neg") (param $$x f32) (result f32)
+ (f32.add (f32.neg (local.get $$x)) (local.get $$x)))
+
+ (func (export "f64.no_fold_add_neg") (param $$x f64) (result f64)
+ (f64.add (f64.neg (local.get $$x)) (local.get $$x)))
+)`);
+
+// ./test/core/float_exprs.wast:1654
+assert_return(() => invoke($66, `f32.no_fold_add_neg`, [value("f32", 0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1655
+assert_return(() => invoke($66, `f32.no_fold_add_neg`, [value("f32", -0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1656
+assert_return(() => invoke($66, `f32.no_fold_add_neg`, [value("f32", Infinity)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:1657
+assert_return(() => invoke($66, `f32.no_fold_add_neg`, [value("f32", -Infinity)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:1659
+assert_return(() => invoke($66, `f64.no_fold_add_neg`, [value("f64", 0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1660
+assert_return(() => invoke($66, `f64.no_fold_add_neg`, [value("f64", -0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1661
+assert_return(() => invoke($66, `f64.no_fold_add_neg`, [value("f64", Infinity)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:1662
+assert_return(() => invoke($66, `f64.no_fold_add_neg`, [value("f64", -Infinity)]), [`canonical_nan`]);
+
+// ./test/core/float_exprs.wast:1666
+let $67 = instantiate(`(module
+ (func (export "f32.no_fold_6x_via_add") (param $$x f32) (result f32)
+ (f32.add (f32.add (f32.add (f32.add (f32.add
+ (local.get $$x)
+ (local.get $$x)) (local.get $$x)) (local.get $$x))
+ (local.get $$x)) (local.get $$x)))
+
+ (func (export "f64.no_fold_6x_via_add") (param $$x f64) (result f64)
+ (f64.add (f64.add (f64.add (f64.add (f64.add
+ (local.get $$x)
+ (local.get $$x)) (local.get $$x)) (local.get $$x))
+ (local.get $$x)) (local.get $$x)))
+)`);
+
+// ./test/core/float_exprs.wast:1680
+assert_return(
+ () => invoke($67, `f32.no_fold_6x_via_add`, [
+ value("f32", -855513700000000000000000000000),
+ ]),
+ [value("f32", -5133083000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1681
+assert_return(
+ () => invoke($67, `f32.no_fold_6x_via_add`, [
+ value("f32", -0.00000000000000000000001209506),
+ ]),
+ [value("f32", -0.00000000000000000000007257036)],
+);
+
+// ./test/core/float_exprs.wast:1682
+assert_return(
+ () => invoke($67, `f32.no_fold_6x_via_add`, [
+ value("f32", 0.000000000000000000000006642689),
+ ]),
+ [value("f32", 0.000000000000000000000039856134)],
+);
+
+// ./test/core/float_exprs.wast:1683
+assert_return(
+ () => invoke($67, `f32.no_fold_6x_via_add`, [value("f32", -0.0000000006147346)]),
+ [value("f32", -0.0000000036884074)],
+);
+
+// ./test/core/float_exprs.wast:1684
+assert_return(
+ () => invoke($67, `f32.no_fold_6x_via_add`, [
+ value("f32", -1209858100000000000000000),
+ ]),
+ [value("f32", -7259148300000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1686
+assert_return(
+ () => invoke($67, `f64.no_fold_6x_via_add`, [value("f64", -351704490602771400000)]),
+ [value("f64", -2110226943616628600000)],
+);
+
+// ./test/core/float_exprs.wast:1687
+assert_return(
+ () => invoke($67, `f64.no_fold_6x_via_add`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014824294109868734),
+ ]),
+ [
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008894576465921239),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1688
+assert_return(
+ () => invoke($67, `f64.no_fold_6x_via_add`, [
+ value("f64", -7484567838781003000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -44907407032686014000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1689
+assert_return(
+ () => invoke($67, `f64.no_fold_6x_via_add`, [
+ value("f64", 17277868192936067000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 103667209157616410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1690
+assert_return(
+ () => invoke($67, `f64.no_fold_6x_via_add`, [
+ value("f64", -43116397525195610000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -258698385151173640000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1695
+let $68 = instantiate(`(module
+ (func (export "f32.no_fold_div_div") (param $$x f32) (param $$y f32) (param $$z f32) (result f32)
+ (f32.div (f32.div (local.get $$x) (local.get $$y)) (local.get $$z)))
+
+ (func (export "f64.no_fold_div_div") (param $$x f64) (param $$y f64) (param $$z f64) (result f64)
+ (f64.div (f64.div (local.get $$x) (local.get $$y)) (local.get $$z)))
+)`);
+
+// ./test/core/float_exprs.wast:1703
+assert_return(
+ () => invoke($68, `f32.no_fold_div_div`, [
+ value("f32", -593847530000000000000000),
+ value("f32", -0.000030265672),
+ value("f32", -1584.8682),
+ ]),
+ [value("f32", -12380309000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1704
+assert_return(
+ () => invoke($68, `f32.no_fold_div_div`, [
+ value("f32", 0.0000000000000000000015438962),
+ value("f32", 2533429300000000000000000000000000),
+ value("f32", -0.00000000000000000000000000000000026844783),
+ ]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:1705
+assert_return(
+ () => invoke($68, `f32.no_fold_div_div`, [
+ value("f32", 13417423000000),
+ value("f32", 0.000000000000000000000000000000029339205),
+ value("f32", 76386374000000000000000000000000),
+ ]),
+ [value("f32", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1706
+assert_return(
+ () => invoke($68, `f32.no_fold_div_div`, [
+ value("f32", -0.00010776529),
+ value("f32", -34220943000000000000000000000000000000),
+ value("f32", -0.00000000000016562324),
+ ]),
+ [value("f32", -0.000000000000000000000000000019011327)],
+);
+
+// ./test/core/float_exprs.wast:1707
+assert_return(
+ () => invoke($68, `f32.no_fold_div_div`, [
+ value("f32", 130582500000000),
+ value("f32", 96245350000000000),
+ value("f32", -41461545000000000000000000000000000000),
+ ]),
+ [value("f32", -0.000000000000000000000000000000000000000032723)],
+);
+
+// ./test/core/float_exprs.wast:1709
+assert_return(
+ () => invoke($68, `f64.no_fold_div_div`, [
+ value("f64", 477762874671014340000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 102786720420404010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000718999894988884),
+ ]),
+ [
+ value("f64", -64646730118787990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1710
+assert_return(
+ () => invoke($68, `f64.no_fold_div_div`, [
+ value("f64", -21790236783875714000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.0000000028324436844616576),
+ value("f64", 186110768259868700000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -41336068079920670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1711
+assert_return(
+ () => invoke($68, `f64.no_fold_div_div`, [
+ value("f64", -7.287619347826683),
+ value("f64", -13467607316739855000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 2462719007013688000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000219725454),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1712
+assert_return(
+ () => invoke($68, `f64.no_fold_div_div`, [
+ value("f64", -286552397862963300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010211980370639414),
+ value("f64", 28764586483324010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1713
+assert_return(
+ () => invoke($68, `f64.no_fold_div_div`, [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009525735602663874),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050233948816631796),
+ value("f64", -0.0000000000000000000000000000000000000000028304570228221077),
+ ]),
+ [
+ value("f64", 0.00000000000000000000000000000000000000000000006699534674970116),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1719
+let $69 = instantiate(`(module
+ (func (export "f32.no_fold_mul_divs") (param $$x f32) (param $$y f32) (param $$z f32) (param $$w f32) (result f32)
+ (f32.mul (f32.div (local.get $$x) (local.get $$y)) (f32.div (local.get $$z) (local.get $$w))))
+
+ (func (export "f64.no_fold_mul_divs") (param $$x f64) (param $$y f64) (param $$z f64) (param $$w f64) (result f64)
+ (f64.mul (f64.div (local.get $$x) (local.get $$y)) (f64.div (local.get $$z) (local.get $$w))))
+)`);
+
+// ./test/core/float_exprs.wast:1727
+assert_return(
+ () => invoke($69, `f32.no_fold_mul_divs`, [
+ value("f32", -0.0000000000000000000000000000000027234733),
+ value("f32", 0.0000000000000000000000000003897843),
+ value("f32", 0.000000000000000000000000004847123),
+ value("f32", -25.357775),
+ ]),
+ [value("f32", 0.0000000000000000000000000000000013355855)],
+);
+
+// ./test/core/float_exprs.wast:1728
+assert_return(
+ () => invoke($69, `f32.no_fold_mul_divs`, [
+ value("f32", -5372844000000000000000000000000),
+ value("f32", 38340910),
+ value("f32", 0.000014973162),
+ value("f32", 0.19213825),
+ ]),
+ [value("f32", -10920475000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1729
+assert_return(
+ () => invoke($69, `f32.no_fold_mul_divs`, [
+ value("f32", -16085042000),
+ value("f32", -1092920200000),
+ value("f32", -869606000),
+ value("f32", -1201.206),
+ ]),
+ [value("f32", 10654.639)],
+);
+
+// ./test/core/float_exprs.wast:1730
+assert_return(
+ () => invoke($69, `f32.no_fold_mul_divs`, [
+ value("f32", -1271223140000000000000000000000000),
+ value("f32", 0.00000000010768114),
+ value("f32", 0.000018576271),
+ value("f32", 492686200000000000000000),
+ ]),
+ [value("f32", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1731
+assert_return(
+ () => invoke($69, `f32.no_fold_mul_divs`, [
+ value("f32", 0.00000000000000013783864),
+ value("f32", -0.000000000000000000065046285),
+ value("f32", 0.00000000000000000000000000068167684),
+ value("f32", 0.000000000022892627),
+ ]),
+ [value("f32", -0.000000000000063100295)],
+);
+
+// ./test/core/float_exprs.wast:1733
+assert_return(
+ () => invoke($69, `f64.no_fold_mul_divs`, [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003466499805233369),
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004045567512248635),
+ value("f64", -646234107060759200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 100455895333540740000000000000000000000000000000000000000),
+ ]),
+ [value("f64", -55.12215321310017)],
+);
+
+// ./test/core/float_exprs.wast:1734
+assert_return(
+ () => invoke($69, `f64.no_fold_mul_divs`, [
+ value("f64", -50548839076363250000000000000000000),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022223781649976275),
+ value("f64", -15029790371100852000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -699412375953812100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1735
+assert_return(
+ () => invoke($69, `f64.no_fold_mul_divs`, [
+ value("f64", -836111653634494700000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -10029528876067567000000000000000000000000000000000000000000),
+ value("f64", -0.0000000000000000000000000000000000000000012867801766038772),
+ value("f64", -42230277746883753000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002540178100556387),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1736
+assert_return(
+ () => invoke($69, `f64.no_fold_mul_divs`, [
+ value("f64", -1202003211641119300000000000000000000000),
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004667409771338769),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010888652376540085),
+ value("f64", 18334948666517216000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:1737
+assert_return(
+ () => invoke($69, `f64.no_fold_mul_divs`, [
+ value("f64", 0.000006331839568840419),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000005544474241905778),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027822472480359097),
+ value("f64", -14419321081893022000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022035374770746518),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1741
+let $70 = instantiate(`(module
+ (func (export "f32.no_fold_add_divs") (param $$x f32) (param $$y f32) (param $$z f32) (result f32)
+ (f32.add (f32.div (local.get $$x) (local.get $$z)) (f32.div (local.get $$y) (local.get $$z))))
+
+ (func (export "f64.no_fold_add_divs") (param $$x f64) (param $$y f64) (param $$z f64) (result f64)
+ (f64.add (f64.div (local.get $$x) (local.get $$z)) (f64.div (local.get $$y) (local.get $$z))))
+)`);
+
+// ./test/core/float_exprs.wast:1749
+assert_return(
+ () => invoke($70, `f32.no_fold_add_divs`, [
+ value("f32", 377.3689),
+ value("f32", -0.040118184),
+ value("f32", -136292990000000000000000000000000000000),
+ ]),
+ [value("f32", -0.0000000000000000000000000000000000027685121)],
+);
+
+// ./test/core/float_exprs.wast:1750
+assert_return(
+ () => invoke($70, `f32.no_fold_add_divs`, [
+ value("f32", -0.00000000000000000018234023),
+ value("f32", -0.0000000000000033970288),
+ value("f32", -170996700000000),
+ ]),
+ [value("f32", 0.000000000000000000000000000019867115)],
+);
+
+// ./test/core/float_exprs.wast:1751
+assert_return(
+ () => invoke($70, `f32.no_fold_add_divs`, [
+ value("f32", -0.000000000000019672638),
+ value("f32", 0.00000000000000000006414099),
+ value("f32", -541989070000000),
+ ]),
+ [value("f32", 0.000000000000000000000000000036296997)],
+);
+
+// ./test/core/float_exprs.wast:1752
+assert_return(
+ () => invoke($70, `f32.no_fold_add_divs`, [
+ value("f32", -0.0000000000000000000000000000004038506),
+ value("f32", 0.000000000000000000000000000003848228),
+ value("f32", -345237200000000000000000000),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:1753
+assert_return(
+ () => invoke($70, `f32.no_fold_add_divs`, [
+ value("f32", 0.0010934415),
+ value("f32", 0.20703124),
+ value("f32", 0.00000000000000000000000000000000000013509784),
+ ]),
+ [value("f32", 1540547700000000000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1755
+assert_return(
+ () => invoke($70, `f64.no_fold_add_divs`, [
+ value("f64", -4917019432143760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 68132156322019020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 26125410100237784000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024196801752520584),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1756
+assert_return(
+ () => invoke($70, `f64.no_fold_add_divs`, [
+ value("f64", -10206467953224550),
+ value("f64", 63.422616671746226),
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016024747869814892),
+ ]),
+ [
+ value("f64", 6369190976445851000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1757
+assert_return(
+ () => invoke($70, `f64.no_fold_add_divs`, [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015270569633109837),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025755503329232514),
+ value("f64", 58826939164214920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:1758
+assert_return(
+ () => invoke($70, `f64.no_fold_add_divs`, [
+ value("f64", 26667964874394640000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", -2131569252493657800000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.000000000000000000000000000000000000012377004518680012),
+ ]),
+ [
+ value("f64", -172217969324625340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1759
+assert_return(
+ () => invoke($70, `f64.no_fold_add_divs`, [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012952888377288216),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005808769259900048),
+ value("f64", 0.0000000000000000000016745741699443756),
+ ]),
+ [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007735034106987796),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1763
+let $71 = instantiate(`(module
+ (func (export "f32.no_fold_sqrt_square") (param $$x f32) (result f32)
+ (f32.sqrt (f32.mul (local.get $$x) (local.get $$x))))
+
+ (func (export "f64.no_fold_sqrt_square") (param $$x f64) (result f64)
+ (f64.sqrt (f64.mul (local.get $$x) (local.get $$x))))
+)`);
+
+// ./test/core/float_exprs.wast:1771
+assert_return(
+ () => invoke($71, `f32.no_fold_sqrt_square`, [
+ value("f32", -0.00000000000000000001846),
+ ]),
+ [value("f32", 0.00000000000000000001846001)],
+);
+
+// ./test/core/float_exprs.wast:1772
+assert_return(
+ () => invoke($71, `f32.no_fold_sqrt_square`, [
+ value("f32", -0.00000000000000000000017907473),
+ ]),
+ [value("f32", 0.00000000000000000000017952678)],
+);
+
+// ./test/core/float_exprs.wast:1773
+assert_return(
+ () => invoke($71, `f32.no_fold_sqrt_square`, [
+ value("f32", -0.00000000000000000000079120785),
+ ]),
+ [value("f32", 0.000000000000000000000791442)],
+);
+
+// ./test/core/float_exprs.wast:1774
+assert_return(
+ () => invoke($71, `f32.no_fold_sqrt_square`, [
+ value("f32", 0.000000000000000000000000018012938),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:1775
+assert_return(
+ () => invoke($71, `f32.no_fold_sqrt_square`, [
+ value("f32", 610501970000000000000000000000000),
+ ]),
+ [value("f32", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1777
+assert_return(
+ () => invoke($71, `f64.no_fold_sqrt_square`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006209297167747496),
+ ]),
+ [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006209299542179727),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1778
+assert_return(
+ () => invoke($71, `f64.no_fold_sqrt_square`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024211175303738945),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024211175303738937),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1779
+assert_return(
+ () => invoke($71, `f64.no_fold_sqrt_square`, [
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016460687611875645),
+ ]),
+ [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016460687611532367),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1780
+assert_return(
+ () => invoke($71, `f64.no_fold_sqrt_square`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003797811613378828),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:1781
+assert_return(
+ () => invoke($71, `f64.no_fold_sqrt_square`, [
+ value("f64", 815808428460559200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1785
+let $72 = instantiate(`(module
+ (func (export "f32.no_fold_mul_sqrts") (param $$x f32) (param $$y f32) (result f32)
+ (f32.mul (f32.sqrt (local.get $$x)) (f32.sqrt (local.get $$y))))
+
+ (func (export "f64.no_fold_mul_sqrts") (param $$x f64) (param $$y f64) (result f64)
+ (f64.mul (f64.sqrt (local.get $$x)) (f64.sqrt (local.get $$y))))
+)`);
+
+// ./test/core/float_exprs.wast:1793
+assert_return(
+ () => invoke($72, `f32.no_fold_mul_sqrts`, [
+ value("f32", 0.000000000000000000000000000000000000043885047),
+ value("f32", -0.00000000000000000000000011867334),
+ ]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:1794
+assert_return(
+ () => invoke($72, `f32.no_fold_mul_sqrts`, [
+ value("f32", 0.00000000000000000000000000025365908),
+ value("f32", 0.00000000041320675),
+ ]),
+ [value("f32", 0.00000000000000000032374932)],
+);
+
+// ./test/core/float_exprs.wast:1795
+assert_return(
+ () => invoke($72, `f32.no_fold_mul_sqrts`, [
+ value("f32", 0.0000000000000000000000000042144832),
+ value("f32", 97.249115),
+ ]),
+ [value("f32", 0.00000000000064019905)],
+);
+
+// ./test/core/float_exprs.wast:1796
+assert_return(
+ () => invoke($72, `f32.no_fold_mul_sqrts`, [
+ value("f32", 3724076300000000000000000000000),
+ value("f32", 0.002944908),
+ ]),
+ [value("f32", 104723750000000)],
+);
+
+// ./test/core/float_exprs.wast:1797
+assert_return(
+ () => invoke($72, `f32.no_fold_mul_sqrts`, [
+ value("f32", 0.00000000000000001866056),
+ value("f32", 0.002111261),
+ ]),
+ [value("f32", 0.00000000019848755)],
+);
+
+// ./test/core/float_exprs.wast:1799
+assert_return(
+ () => invoke($72, `f64.no_fold_mul_sqrts`, [
+ value("f64", -0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012742064369772862),
+ value("f64", -0.006829962938197246),
+ ]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:1800
+assert_return(
+ () => invoke($72, `f64.no_fold_mul_sqrts`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037082569269527534),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047183002857015043),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041829020688865954),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1801
+assert_return(
+ () => invoke($72, `f64.no_fold_mul_sqrts`, [
+ value("f64", 0.000000000000000000000000002329359505918655),
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020743399642806364),
+ ]),
+ [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021981545701574452),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1802
+assert_return(
+ () => invoke($72, `f64.no_fold_mul_sqrts`, [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010541899336289437),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000598123819872803),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002511047809129887),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1803
+assert_return(
+ () => invoke($72, `f64.no_fold_mul_sqrts`, [
+ value("f64", 25589482.717358638),
+ value("f64", 39138912071199020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 1000771959050695500000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1807
+let $73 = instantiate(`(module
+ (func (export "f32.no_fold_div_sqrts") (param $$x f32) (param $$y f32) (result f32)
+ (f32.div (f32.sqrt (local.get $$x)) (f32.sqrt (local.get $$y))))
+
+ (func (export "f64.no_fold_div_sqrts") (param $$x f64) (param $$y f64) (result f64)
+ (f64.div (f64.sqrt (local.get $$x)) (f64.sqrt (local.get $$y))))
+)`);
+
+// ./test/core/float_exprs.wast:1815
+assert_return(
+ () => invoke($73, `f32.no_fold_div_sqrts`, [
+ value("f32", -58545012),
+ value("f32", -0.000000000000000006443773),
+ ]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:1816
+assert_return(
+ () => invoke($73, `f32.no_fold_div_sqrts`, [
+ value("f32", 7407384000),
+ value("f32", 209778930),
+ ]),
+ [value("f32", 5.9422584)],
+);
+
+// ./test/core/float_exprs.wast:1817
+assert_return(
+ () => invoke($73, `f32.no_fold_div_sqrts`, [
+ value("f32", 0.0000000000000000000000000000000000013764126),
+ value("f32", 54692.9),
+ ]),
+ [value("f32", 0.0000000000000000000050165927)],
+);
+
+// ./test/core/float_exprs.wast:1818
+assert_return(
+ () => invoke($73, `f32.no_fold_div_sqrts`, [
+ value("f32", 979288960000000000),
+ value("f32", 0.0000000012643552),
+ ]),
+ [value("f32", 27830490000000)],
+);
+
+// ./test/core/float_exprs.wast:1819
+assert_return(
+ () => invoke($73, `f32.no_fold_div_sqrts`, [
+ value("f32", 0.00000000000000000000000000000000029141283),
+ value("f32", 0.00000000000000000000000000000017928174),
+ ]),
+ [value("f32", 0.04031682)],
+);
+
+// ./test/core/float_exprs.wast:1821
+assert_return(
+ () => invoke($73, `f64.no_fold_div_sqrts`, [
+ value("f64", -0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012206137319883022),
+ value("f64", -0.000000000000000000000000000000000000000000000000000000008209583449676083),
+ ]),
+ [`canonical_nan`],
+);
+
+// ./test/core/float_exprs.wast:1822
+assert_return(
+ () => invoke($73, `f64.no_fold_div_sqrts`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033818852462305824),
+ value("f64", 7655783976315048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021017671425665687),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1823
+assert_return(
+ () => invoke($73, `f64.no_fold_div_sqrts`, [
+ value("f64", 45963335670647510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.0000000000000000000000000000000023932467846883046),
+ ]),
+ [
+ value("f64", 138583660172663150000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1824
+assert_return(
+ () => invoke($73, `f64.no_fold_div_sqrts`, [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025327340978668086),
+ value("f64", 4475305129961258000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023789399141325018),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1825
+assert_return(
+ () => invoke($73, `f64.no_fold_div_sqrts`, [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005103070160197939),
+ value("f64", 460157669098082500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010530826009924495),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1829
+let $74 = instantiate(`(module
+ (func (export "f32.no_fold_mul_sqrt_div") (param $$x f32) (param $$y f32) (result f32)
+ (f32.div (f32.mul (local.get $$x) (f32.sqrt (local.get $$y))) (local.get $$y)))
+
+ (func (export "f64.no_fold_mul_sqrt_div") (param $$x f64) (param $$y f64) (result f64)
+ (f64.div (f64.mul (local.get $$x) (f64.sqrt (local.get $$y))) (local.get $$y)))
+)`);
+
+// ./test/core/float_exprs.wast:1837
+assert_return(
+ () => invoke($74, `f32.no_fold_mul_sqrt_div`, [
+ value("f32", -4728556800000000000000000),
+ value("f32", 8677282000000000000000000000),
+ ]),
+ [value("f32", -Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1838
+assert_return(
+ () => invoke($74, `f32.no_fold_mul_sqrt_div`, [
+ value("f32", -0.0000000000000000000000000000000000011776882),
+ value("f32", 0.000000000000000000000000000009805153),
+ ]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:1839
+assert_return(
+ () => invoke($74, `f32.no_fold_mul_sqrt_div`, [
+ value("f32", 816717060),
+ value("f32", 0.000000000000000000000000000000000000003323171),
+ ]),
+ [value("f32", 14167568000000000000000000000)],
+);
+
+// ./test/core/float_exprs.wast:1840
+assert_return(
+ () => invoke($74, `f32.no_fold_mul_sqrt_div`, [
+ value("f32", -11932267000000),
+ value("f32", 8637067000000000000000000000000000),
+ ]),
+ [value("f32", -0.00012839255)],
+);
+
+// ./test/core/float_exprs.wast:1841
+assert_return(
+ () => invoke($74, `f32.no_fold_mul_sqrt_div`, [
+ value("f32", -401.0235),
+ value("f32", 134.33022),
+ ]),
+ [value("f32", -34.600548)],
+);
+
+// ./test/core/float_exprs.wast:1843
+assert_return(
+ () => invoke($74, `f64.no_fold_mul_sqrt_div`, [
+ value("f64", 1468134622910490500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 2466074582285183000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [value("f64", Infinity)],
+);
+
+// ./test/core/float_exprs.wast:1844
+assert_return(
+ () => invoke($74, `f64.no_fold_mul_sqrt_div`, [
+ value("f64", -0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017254022016758028),
+ value("f64", 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055835540747130025),
+ ]),
+ [value("f64", -0)],
+);
+
+// ./test/core/float_exprs.wast:1845
+assert_return(
+ () => invoke($74, `f64.no_fold_mul_sqrt_div`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016812810256029166),
+ value("f64", 7362783602442129000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006196112486187196),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1846
+assert_return(
+ () => invoke($74, `f64.no_fold_mul_sqrt_div`, [
+ value("f64", -10605483729939836000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ value("f64", 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000622591783694072),
+ ]),
+ [
+ value("f64", -42503900822233765000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1847
+assert_return(
+ () => invoke($74, `f64.no_fold_mul_sqrt_div`, [
+ value("f64", 26336349695373093000000000000000),
+ value("f64", 30791413285853300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004746142447510695),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1852
+let $75 = instantiate(`(module
+ (func (export "f32.no_flush_intermediate_subnormal") (param $$x f32) (param $$y f32) (param $$z f32) (result f32)
+ (f32.mul (f32.mul (local.get $$x) (local.get $$y)) (local.get $$z)))
+
+ (func (export "f64.no_flush_intermediate_subnormal") (param $$x f64) (param $$y f64) (param $$z f64) (result f64)
+ (f64.mul (f64.mul (local.get $$x) (local.get $$y)) (local.get $$z)))
+)`);
+
+// ./test/core/float_exprs.wast:1860
+assert_return(
+ () => invoke($75, `f32.no_flush_intermediate_subnormal`, [
+ value("f32", 0.000000000000000000000000000000000000011754944),
+ value("f32", 0.00000011920929),
+ value("f32", 8388608),
+ ]),
+ [value("f32", 0.000000000000000000000000000000000000011754944)],
+);
+
+// ./test/core/float_exprs.wast:1861
+assert_return(
+ () => invoke($75, `f64.no_flush_intermediate_subnormal`, [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072014),
+ value("f64", 0.0000000000000002220446049250313),
+ value("f64", 4503599627370496),
+ ]),
+ [
+ value("f64", 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022250738585072014),
+ ],
+);
+
+// ./test/core/float_exprs.wast:1866
+let $76 = instantiate(`(module
+ (func (export "f32.recoding_eq") (param $$x f32) (param $$y f32) (result i32)
+ (f32.eq (f32.mul (local.get $$x) (local.get $$y)) (local.get $$x)))
+
+ (func (export "f32.recoding_le") (param $$x f32) (param $$y f32) (result i32)
+ (f32.le (f32.mul (local.get $$x) (local.get $$y)) (local.get $$x)))
+
+ (func (export "f32.recoding_lt") (param $$x f32) (param $$y f32) (result i32)
+ (f32.lt (f32.mul (local.get $$x) (local.get $$y)) (local.get $$x)))
+
+ (func (export "f64.recoding_eq") (param $$x f64) (param $$y f64) (result i32)
+ (f64.eq (f64.mul (local.get $$x) (local.get $$y)) (local.get $$x)))
+
+ (func (export "f64.recoding_le") (param $$x f64) (param $$y f64) (result i32)
+ (f64.le (f64.mul (local.get $$x) (local.get $$y)) (local.get $$x)))
+
+ (func (export "f64.recoding_lt") (param $$x f64) (param $$y f64) (result i32)
+ (f64.lt (f64.mul (local.get $$x) (local.get $$y)) (local.get $$x)))
+
+ (func (export "recoding_demote") (param $$x f64) (param $$y f32) (result f32)
+ (f32.mul (f32.demote_f64 (local.get $$x)) (local.get $$y)))
+)`);
+
+// ./test/core/float_exprs.wast:1889
+assert_return(
+ () => invoke($76, `f32.recoding_eq`, [value("f32", -Infinity), value("f32", 3)]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:1890
+assert_return(
+ () => invoke($76, `f32.recoding_le`, [value("f32", -Infinity), value("f32", 3)]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:1891
+assert_return(
+ () => invoke($76, `f32.recoding_lt`, [value("f32", -Infinity), value("f32", 3)]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:1893
+assert_return(
+ () => invoke($76, `f32.recoding_eq`, [value("f32", 0), value("f32", 1)]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:1894
+assert_return(
+ () => invoke($76, `f32.recoding_le`, [value("f32", 0), value("f32", 1)]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:1895
+assert_return(
+ () => invoke($76, `f32.recoding_lt`, [value("f32", 0), value("f32", 1)]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:1897
+assert_return(
+ () => invoke($76, `f64.recoding_eq`, [value("f64", -Infinity), value("f64", 3)]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:1898
+assert_return(
+ () => invoke($76, `f64.recoding_le`, [value("f64", -Infinity), value("f64", 3)]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:1899
+assert_return(
+ () => invoke($76, `f64.recoding_lt`, [value("f64", -Infinity), value("f64", 3)]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:1901
+assert_return(
+ () => invoke($76, `f64.recoding_eq`, [value("f64", 0), value("f64", 1)]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:1902
+assert_return(
+ () => invoke($76, `f64.recoding_le`, [value("f64", 0), value("f64", 1)]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:1903
+assert_return(
+ () => invoke($76, `f64.recoding_lt`, [value("f64", 0), value("f64", 1)]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:1905
+assert_return(
+ () => invoke($76, `recoding_demote`, [
+ value("f64", 0.00000000000000000000000000000000000000023860049081905093),
+ value("f32", 1221),
+ ]),
+ [value("f32", 0.0000000000000000000000000000000000002913312)],
+);
+
+// ./test/core/float_exprs.wast:1910
+let $77 = instantiate(`(module
+ (func (export "f32.no_extended_precision_div") (param $$x f32) (param $$y f32) (param $$z f32) (result i32)
+ (f32.eq (f32.div (local.get $$x) (local.get $$y)) (local.get $$z)))
+
+ (func (export "f64.no_extended_precision_div") (param $$x f64) (param $$y f64) (param $$z f64) (result i32)
+ (f64.eq (f64.div (local.get $$x) (local.get $$y)) (local.get $$z)))
+)`);
+
+// ./test/core/float_exprs.wast:1918
+assert_return(
+ () => invoke($77, `f32.no_extended_precision_div`, [
+ value("f32", 3),
+ value("f32", 7),
+ value("f32", 0.42857143),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:1919
+assert_return(
+ () => invoke($77, `f64.no_extended_precision_div`, [
+ value("f64", 3),
+ value("f64", 7),
+ value("f64", 0.42857142857142855),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:1926
+let $78 = instantiate(`(module
+ (func (export "f32.no_distribute_exact") (param $$x f32) (result f32)
+ (f32.add (f32.mul (f32.const -8.0) (local.get $$x)) (f32.mul (f32.const 8.0) (local.get $$x))))
+
+ (func (export "f64.no_distribute_exact") (param $$x f64) (result f64)
+ (f64.add (f64.mul (f64.const -8.0) (local.get $$x)) (f64.mul (f64.const 8.0) (local.get $$x))))
+)`);
+
+// ./test/core/float_exprs.wast:1934
+assert_return(() => invoke($78, `f32.no_distribute_exact`, [value("f32", -0)]), [value("f32", 0)]);
+
+// ./test/core/float_exprs.wast:1935
+assert_return(() => invoke($78, `f64.no_distribute_exact`, [value("f64", -0)]), [value("f64", 0)]);
+
+// ./test/core/float_exprs.wast:1940
+let $79 = instantiate(`(module
+ (func (export "f32.sqrt") (param f32) (result f32)
+ (f32.sqrt (local.get 0)))
+
+ (func (export "f32.xkcd_sqrt_2") (param f32) (param f32) (param f32) (param f32) (result f32)
+ (f32.add (f32.div (local.get 0) (local.get 1)) (f32.div (local.get 2) (f32.sub (local.get 3) (local.get 2)))))
+
+ (func (export "f32.xkcd_sqrt_3") (param f32) (param f32) (param f32) (result f32)
+ (f32.div (f32.mul (local.get 0) (local.get 1)) (local.get 2)))
+
+ (func (export "f32.xkcd_sqrt_5") (param f32) (param f32) (param f32) (result f32)
+ (f32.add (f32.div (local.get 0) (local.get 1)) (f32.div (local.get 2) (local.get 0))))
+
+ (func (export "f32.xkcd_better_sqrt_5") (param f32) (param f32) (param f32) (param f32) (result f32)
+ (f32.div (f32.add (local.get 0) (f32.mul (local.get 1) (local.get 2))) (f32.sub (local.get 3) (f32.mul (local.get 1) (local.get 2)))))
+
+ (func (export "f64.sqrt") (param f64) (result f64)
+ (f64.sqrt (local.get 0)))
+
+ (func (export "f64.xkcd_sqrt_2") (param f64) (param f64) (param f64) (param f64) (result f64)
+ (f64.add (f64.div (local.get 0) (local.get 1)) (f64.div (local.get 2) (f64.sub (local.get 3) (local.get 2)))))
+
+ (func (export "f64.xkcd_sqrt_3") (param f64) (param f64) (param f64) (result f64)
+ (f64.div (f64.mul (local.get 0) (local.get 1)) (local.get 2)))
+
+ (func (export "f64.xkcd_sqrt_5") (param f64) (param f64) (param f64) (result f64)
+ (f64.add (f64.div (local.get 0) (local.get 1)) (f64.div (local.get 2) (local.get 0))))
+
+ (func (export "f64.xkcd_better_sqrt_5") (param f64) (param f64) (param f64) (param f64) (result f64)
+ (f64.div (f64.add (local.get 0) (f64.mul (local.get 1) (local.get 2))) (f64.sub (local.get 3) (f64.mul (local.get 1) (local.get 2)))))
+)`);
+
+// ./test/core/float_exprs.wast:1972
+assert_return(() => invoke($79, `f32.sqrt`, [value("f32", 2)]), [value("f32", 1.4142135)]);
+
+// ./test/core/float_exprs.wast:1973
+assert_return(
+ () => invoke($79, `f32.xkcd_sqrt_2`, [
+ value("f32", 3),
+ value("f32", 5),
+ value("f32", 3.1415927),
+ value("f32", 7),
+ ]),
+ [value("f32", 1.4142201)],
+);
+
+// ./test/core/float_exprs.wast:1974
+assert_return(() => invoke($79, `f32.sqrt`, [value("f32", 3)]), [value("f32", 1.7320508)]);
+
+// ./test/core/float_exprs.wast:1975
+assert_return(
+ () => invoke($79, `f32.xkcd_sqrt_3`, [
+ value("f32", 2),
+ value("f32", 2.7182817),
+ value("f32", 3.1415927),
+ ]),
+ [value("f32", 1.7305119)],
+);
+
+// ./test/core/float_exprs.wast:1976
+assert_return(() => invoke($79, `f32.sqrt`, [value("f32", 5)]), [value("f32", 2.236068)]);
+
+// ./test/core/float_exprs.wast:1977
+assert_return(
+ () => invoke($79, `f32.xkcd_sqrt_5`, [
+ value("f32", 2),
+ value("f32", 2.7182817),
+ value("f32", 3),
+ ]),
+ [value("f32", 2.2357588)],
+);
+
+// ./test/core/float_exprs.wast:1978
+assert_return(
+ () => invoke($79, `f32.xkcd_better_sqrt_5`, [
+ value("f32", 13),
+ value("f32", 4),
+ value("f32", 3.1415927),
+ value("f32", 24),
+ ]),
+ [value("f32", 2.236068)],
+);
+
+// ./test/core/float_exprs.wast:1980
+assert_return(() => invoke($79, `f64.sqrt`, [value("f64", 2)]), [value("f64", 1.4142135623730951)]);
+
+// ./test/core/float_exprs.wast:1981
+assert_return(
+ () => invoke($79, `f64.xkcd_sqrt_2`, [
+ value("f64", 3),
+ value("f64", 5),
+ value("f64", 3.141592653589793),
+ value("f64", 7),
+ ]),
+ [value("f64", 1.4142200580539208)],
+);
+
+// ./test/core/float_exprs.wast:1982
+assert_return(() => invoke($79, `f64.sqrt`, [value("f64", 3)]), [value("f64", 1.7320508075688772)]);
+
+// ./test/core/float_exprs.wast:1983
+assert_return(
+ () => invoke($79, `f64.xkcd_sqrt_3`, [
+ value("f64", 2),
+ value("f64", 2.718281828459045),
+ value("f64", 3.141592653589793),
+ ]),
+ [value("f64", 1.7305119588645301)],
+);
+
+// ./test/core/float_exprs.wast:1984
+assert_return(() => invoke($79, `f64.sqrt`, [value("f64", 5)]), [value("f64", 2.23606797749979)]);
+
+// ./test/core/float_exprs.wast:1985
+assert_return(
+ () => invoke($79, `f64.xkcd_sqrt_5`, [
+ value("f64", 2),
+ value("f64", 2.718281828459045),
+ value("f64", 3),
+ ]),
+ [value("f64", 2.2357588823428847)],
+);
+
+// ./test/core/float_exprs.wast:1986
+assert_return(
+ () => invoke($79, `f64.xkcd_better_sqrt_5`, [
+ value("f64", 13),
+ value("f64", 4),
+ value("f64", 3.141592653589793),
+ value("f64", 24),
+ ]),
+ [value("f64", 2.2360678094452893)],
+);
+
+// ./test/core/float_exprs.wast:1991
+let $80 = instantiate(`(module
+ (func (export "f32.compute_radix") (param $$0 f32) (param $$1 f32) (result f32)
+ (loop $$label$$0
+ (br_if $$label$$0
+ (f32.eq
+ (f32.add
+ (f32.sub
+ (f32.add
+ (local.tee $$0 (f32.add (local.get $$0) (local.get $$0)))
+ (f32.const 1)
+ )
+ (local.get $$0)
+ )
+ (f32.const -1)
+ )
+ (f32.const 0)
+ )
+ )
+ )
+ (loop $$label$$2
+ (br_if $$label$$2
+ (f32.ne
+ (f32.sub
+ (f32.sub
+ (f32.add
+ (local.get $$0)
+ (local.tee $$1 (f32.add (local.get $$1) (f32.const 1)))
+ )
+ (local.get $$0)
+ )
+ (local.get $$1)
+ )
+ (f32.const 0)
+ )
+ )
+ )
+ (local.get $$1)
+ )
+
+ (func (export "f64.compute_radix") (param $$0 f64) (param $$1 f64) (result f64)
+ (loop $$label$$0
+ (br_if $$label$$0
+ (f64.eq
+ (f64.add
+ (f64.sub
+ (f64.add
+ (local.tee $$0 (f64.add (local.get $$0) (local.get $$0)))
+ (f64.const 1)
+ )
+ (local.get $$0)
+ )
+ (f64.const -1)
+ )
+ (f64.const 0)
+ )
+ )
+ )
+ (loop $$label$$2
+ (br_if $$label$$2
+ (f64.ne
+ (f64.sub
+ (f64.sub
+ (f64.add
+ (local.get $$0)
+ (local.tee $$1 (f64.add (local.get $$1) (f64.const 1)))
+ )
+ (local.get $$0)
+ )
+ (local.get $$1)
+ )
+ (f64.const 0)
+ )
+ )
+ )
+ (local.get $$1)
+ )
+)`);
+
+// ./test/core/float_exprs.wast:2069
+assert_return(
+ () => invoke($80, `f32.compute_radix`, [value("f32", 1), value("f32", 1)]),
+ [value("f32", 2)],
+);
+
+// ./test/core/float_exprs.wast:2070
+assert_return(
+ () => invoke($80, `f64.compute_radix`, [value("f64", 1), value("f64", 1)]),
+ [value("f64", 2)],
+);
+
+// ./test/core/float_exprs.wast:2075
+let $81 = instantiate(`(module
+ (func (export "f32.no_fold_sub1_mul_add") (param $$x f32) (param $$y f32) (result f32)
+ (f32.add (f32.mul (f32.sub (local.get $$x) (f32.const 1.0)) (local.get $$y)) (local.get $$y)))
+
+ (func (export "f64.no_fold_sub1_mul_add") (param $$x f64) (param $$y f64) (result f64)
+ (f64.add (f64.mul (f64.sub (local.get $$x) (f64.const 1.0)) (local.get $$y)) (local.get $$y)))
+)`);
+
+// ./test/core/float_exprs.wast:2083
+assert_return(
+ () => invoke($81, `f32.no_fold_sub1_mul_add`, [
+ value("f32", 0.00000000023283064),
+ value("f32", 1),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2084
+assert_return(
+ () => invoke($81, `f64.no_fold_sub1_mul_add`, [
+ value("f64", 0.00000000000000000005421010862427522),
+ value("f64", 1),
+ ]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:2089
+let $82 = instantiate(`(module
+ (func (export "f32.no_fold_add_le_monotonicity") (param $$x f32) (param $$y f32) (param $$z f32) (result i32)
+ (f32.le (f32.add (local.get $$x) (local.get $$z)) (f32.add (local.get $$y) (local.get $$z))))
+
+ (func (export "f32.no_fold_add_ge_monotonicity") (param $$x f32) (param $$y f32) (param $$z f32) (result i32)
+ (f32.ge (f32.add (local.get $$x) (local.get $$z)) (f32.add (local.get $$y) (local.get $$z))))
+
+ (func (export "f64.no_fold_add_le_monotonicity") (param $$x f64) (param $$y f64) (param $$z f64) (result i32)
+ (f64.le (f64.add (local.get $$x) (local.get $$z)) (f64.add (local.get $$y) (local.get $$z))))
+
+ (func (export "f64.no_fold_add_ge_monotonicity") (param $$x f64) (param $$y f64) (param $$z f64) (result i32)
+ (f64.ge (f64.add (local.get $$x) (local.get $$z)) (f64.add (local.get $$y) (local.get $$z))))
+)`);
+
+// ./test/core/float_exprs.wast:2103
+assert_return(
+ () => invoke($82, `f32.no_fold_add_le_monotonicity`, [
+ value("f32", 0),
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2104
+assert_return(
+ () => invoke($82, `f32.no_fold_add_le_monotonicity`, [
+ value("f32", Infinity),
+ value("f32", -Infinity),
+ value("f32", Infinity),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2105
+assert_return(
+ () => invoke($82, `f64.no_fold_add_le_monotonicity`, [
+ value("f64", 0),
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2106
+assert_return(
+ () => invoke($82, `f64.no_fold_add_le_monotonicity`, [
+ value("f64", Infinity),
+ value("f64", -Infinity),
+ value("f64", Infinity),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2110
+let $83 = instantiate(`(module
+ (func (export "f32.not_lt") (param $$x f32) (param $$y f32) (result i32)
+ (i32.eqz (f32.lt (local.get $$x) (local.get $$y))))
+
+ (func (export "f32.not_le") (param $$x f32) (param $$y f32) (result i32)
+ (i32.eqz (f32.le (local.get $$x) (local.get $$y))))
+
+ (func (export "f32.not_gt") (param $$x f32) (param $$y f32) (result i32)
+ (i32.eqz (f32.gt (local.get $$x) (local.get $$y))))
+
+ (func (export "f32.not_ge") (param $$x f32) (param $$y f32) (result i32)
+ (i32.eqz (f32.ge (local.get $$x) (local.get $$y))))
+
+ (func (export "f64.not_lt") (param $$x f64) (param $$y f64) (result i32)
+ (i32.eqz (f64.lt (local.get $$x) (local.get $$y))))
+
+ (func (export "f64.not_le") (param $$x f64) (param $$y f64) (result i32)
+ (i32.eqz (f64.le (local.get $$x) (local.get $$y))))
+
+ (func (export "f64.not_gt") (param $$x f64) (param $$y f64) (result i32)
+ (i32.eqz (f64.gt (local.get $$x) (local.get $$y))))
+
+ (func (export "f64.not_ge") (param $$x f64) (param $$y f64) (result i32)
+ (i32.eqz (f64.ge (local.get $$x) (local.get $$y))))
+)`);
+
+// ./test/core/float_exprs.wast:2136
+assert_return(
+ () => invoke($83, `f32.not_lt`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:2137
+assert_return(
+ () => invoke($83, `f32.not_le`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:2138
+assert_return(
+ () => invoke($83, `f32.not_gt`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:2139
+assert_return(
+ () => invoke($83, `f32.not_ge`, [
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ value("f32", 0),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:2140
+assert_return(
+ () => invoke($83, `f64.not_lt`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:2141
+assert_return(
+ () => invoke($83, `f64.not_le`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:2142
+assert_return(
+ () => invoke($83, `f64.not_gt`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:2143
+assert_return(
+ () => invoke($83, `f64.not_ge`, [
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ value("f64", 0),
+ ]),
+ [value("i32", 1)],
+);
+
+// ./test/core/float_exprs.wast:2149
+let $84 = instantiate(`(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)))))
+)`);
+
+// ./test/core/float_exprs.wast:2157
+assert_return(() => invoke($84, `f32.epsilon`, []), [value("f32", -0.00000011920929)]);
+
+// ./test/core/float_exprs.wast:2158
+assert_return(() => invoke($84, `f64.epsilon`, []), [value("f64", 0.0000000000000002220446049250313)]);
+
+// ./test/core/float_exprs.wast:2164
+let $85 = instantiate(`(module
+ (func (export "f32.epsilon") (result f32)
+ (local $$x f32)
+ (local $$result f32)
+ (local.set $$x (f32.const 1))
+ (loop $$loop
+ (br_if $$loop
+ (f32.gt
+ (f32.add
+ (local.tee $$x
+ (f32.mul
+ (local.tee $$result (local.get $$x))
+ (f32.const 0.5)
+ )
+ )
+ (f32.const 1)
+ )
+ (f32.const 1)
+ )
+ )
+ )
+ (local.get $$result)
+ )
+
+ (func (export "f64.epsilon") (result f64)
+ (local $$x f64)
+ (local $$result f64)
+ (local.set $$x (f64.const 1))
+ (loop $$loop
+ (br_if $$loop
+ (f64.gt
+ (f64.add
+ (local.tee $$x
+ (f64.mul
+ (local.tee $$result (local.get $$x))
+ (f64.const 0.5)
+ )
+ )
+ (f64.const 1)
+ )
+ (f64.const 1)
+ )
+ )
+ )
+ (local.get $$result)
+ )
+)`);
+
+// ./test/core/float_exprs.wast:2212
+assert_return(() => invoke($85, `f32.epsilon`, []), [value("f32", 0.00000011920929)]);
+
+// ./test/core/float_exprs.wast:2213
+assert_return(() => invoke($85, `f64.epsilon`, []), [value("f64", 0.0000000000000002220446049250313)]);
+
+// ./test/core/float_exprs.wast:2218
+let $86 = instantiate(`(module
+ (func (export "f32.no_trichotomy_lt") (param $$x f32) (param $$y f32) (result i32)
+ (i32.or (f32.lt (local.get $$x) (local.get $$y)) (f32.ge (local.get $$x) (local.get $$y))))
+ (func (export "f32.no_trichotomy_le") (param $$x f32) (param $$y f32) (result i32)
+ (i32.or (f32.le (local.get $$x) (local.get $$y)) (f32.gt (local.get $$x) (local.get $$y))))
+ (func (export "f32.no_trichotomy_gt") (param $$x f32) (param $$y f32) (result i32)
+ (i32.or (f32.gt (local.get $$x) (local.get $$y)) (f32.le (local.get $$x) (local.get $$y))))
+ (func (export "f32.no_trichotomy_ge") (param $$x f32) (param $$y f32) (result i32)
+ (i32.or (f32.ge (local.get $$x) (local.get $$y)) (f32.lt (local.get $$x) (local.get $$y))))
+
+ (func (export "f64.no_trichotomy_lt") (param $$x f64) (param $$y f64) (result i32)
+ (i32.or (f64.lt (local.get $$x) (local.get $$y)) (f64.ge (local.get $$x) (local.get $$y))))
+ (func (export "f64.no_trichotomy_le") (param $$x f64) (param $$y f64) (result i32)
+ (i32.or (f64.le (local.get $$x) (local.get $$y)) (f64.gt (local.get $$x) (local.get $$y))))
+ (func (export "f64.no_trichotomy_gt") (param $$x f64) (param $$y f64) (result i32)
+ (i32.or (f64.gt (local.get $$x) (local.get $$y)) (f64.le (local.get $$x) (local.get $$y))))
+ (func (export "f64.no_trichotomy_ge") (param $$x f64) (param $$y f64) (result i32)
+ (i32.or (f64.ge (local.get $$x) (local.get $$y)) (f64.lt (local.get $$x) (local.get $$y))))
+)`);
+
+// ./test/core/float_exprs.wast:2238
+assert_return(
+ () => invoke($86, `f32.no_trichotomy_lt`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2239
+assert_return(
+ () => invoke($86, `f32.no_trichotomy_le`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2240
+assert_return(
+ () => invoke($86, `f32.no_trichotomy_gt`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2241
+assert_return(
+ () => invoke($86, `f32.no_trichotomy_ge`, [
+ value("f32", 0),
+ bytes("f32", [0x0, 0x0, 0xc0, 0x7f]),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2242
+assert_return(
+ () => invoke($86, `f64.no_trichotomy_lt`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2243
+assert_return(
+ () => invoke($86, `f64.no_trichotomy_le`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2244
+assert_return(
+ () => invoke($86, `f64.no_trichotomy_gt`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2245
+assert_return(
+ () => invoke($86, `f64.no_trichotomy_ge`, [
+ value("f64", 0),
+ bytes("f64", [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x7f]),
+ ]),
+ [value("i32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2250
+let $87 = instantiate(`(module
+ (func (export "f32.arithmetic_nan_bitpattern")
+ (param $$x i32) (param $$y i32) (result i32)
+ (i32.and (i32.reinterpret_f32
+ (f32.div
+ (f32.reinterpret_i32 (local.get $$x))
+ (f32.reinterpret_i32 (local.get $$y))))
+ (i32.const 0x7fc00000)))
+ (func (export "f32.canonical_nan_bitpattern")
+ (param $$x i32) (param $$y i32) (result i32)
+ (i32.and (i32.reinterpret_f32
+ (f32.div
+ (f32.reinterpret_i32 (local.get $$x))
+ (f32.reinterpret_i32 (local.get $$y))))
+ (i32.const 0x7fffffff)))
+ (func (export "f32.nonarithmetic_nan_bitpattern")
+ (param $$x i32) (result i32)
+ (i32.reinterpret_f32 (f32.neg (f32.reinterpret_i32 (local.get $$x)))))
+
+ (func (export "f64.arithmetic_nan_bitpattern")
+ (param $$x i64) (param $$y i64) (result i64)
+ (i64.and (i64.reinterpret_f64
+ (f64.div
+ (f64.reinterpret_i64 (local.get $$x))
+ (f64.reinterpret_i64 (local.get $$y))))
+ (i64.const 0x7ff8000000000000)))
+ (func (export "f64.canonical_nan_bitpattern")
+ (param $$x i64) (param $$y i64) (result i64)
+ (i64.and (i64.reinterpret_f64
+ (f64.div
+ (f64.reinterpret_i64 (local.get $$x))
+ (f64.reinterpret_i64 (local.get $$y))))
+ (i64.const 0x7fffffffffffffff)))
+ (func (export "f64.nonarithmetic_nan_bitpattern")
+ (param $$x i64) (result i64)
+ (i64.reinterpret_f64 (f64.neg (f64.reinterpret_i64 (local.get $$x)))))
+
+ ;; Versions of no_fold testcases that only care about NaN bitpatterns.
+ (func (export "f32.no_fold_sub_zero") (param $$x i32) (result i32)
+ (i32.and (i32.reinterpret_f32 (f32.sub (f32.reinterpret_i32 (local.get $$x)) (f32.const 0.0)))
+ (i32.const 0x7fc00000)))
+ (func (export "f32.no_fold_neg0_sub") (param $$x i32) (result i32)
+ (i32.and (i32.reinterpret_f32 (f32.sub (f32.const -0.0) (f32.reinterpret_i32 (local.get $$x))))
+ (i32.const 0x7fc00000)))
+ (func (export "f32.no_fold_mul_one") (param $$x i32) (result i32)
+ (i32.and (i32.reinterpret_f32 (f32.mul (f32.reinterpret_i32 (local.get $$x)) (f32.const 1.0)))
+ (i32.const 0x7fc00000)))
+ (func (export "f32.no_fold_neg1_mul") (param $$x i32) (result i32)
+ (i32.and (i32.reinterpret_f32 (f32.mul (f32.const -1.0) (f32.reinterpret_i32 (local.get $$x))))
+ (i32.const 0x7fc00000)))
+ (func (export "f32.no_fold_div_one") (param $$x i32) (result i32)
+ (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $$x)) (f32.const 1.0)))
+ (i32.const 0x7fc00000)))
+ (func (export "f32.no_fold_div_neg1") (param $$x i32) (result i32)
+ (i32.and (i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (local.get $$x)) (f32.const -1.0)))
+ (i32.const 0x7fc00000)))
+ (func (export "f64.no_fold_sub_zero") (param $$x i64) (result i64)
+ (i64.and (i64.reinterpret_f64 (f64.sub (f64.reinterpret_i64 (local.get $$x)) (f64.const 0.0)))
+ (i64.const 0x7ff8000000000000)))
+ (func (export "f64.no_fold_neg0_sub") (param $$x i64) (result i64)
+ (i64.and (i64.reinterpret_f64 (f64.sub (f64.const -0.0) (f64.reinterpret_i64 (local.get $$x))))
+ (i64.const 0x7ff8000000000000)))
+ (func (export "f64.no_fold_mul_one") (param $$x i64) (result i64)
+ (i64.and (i64.reinterpret_f64 (f64.mul (f64.reinterpret_i64 (local.get $$x)) (f64.const 1.0)))
+ (i64.const 0x7ff8000000000000)))
+ (func (export "f64.no_fold_neg1_mul") (param $$x i64) (result i64)
+ (i64.and (i64.reinterpret_f64 (f64.mul (f64.const -1.0) (f64.reinterpret_i64 (local.get $$x))))
+ (i64.const 0x7ff8000000000000)))
+ (func (export "f64.no_fold_div_one") (param $$x i64) (result i64)
+ (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $$x)) (f64.const 1.0)))
+ (i64.const 0x7ff8000000000000)))
+ (func (export "f64.no_fold_div_neg1") (param $$x i64) (result i64)
+ (i64.and (i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (local.get $$x)) (f64.const -1.0)))
+ (i64.const 0x7ff8000000000000)))
+ (func (export "no_fold_promote_demote") (param $$x i32) (result i32)
+ (i32.and (i32.reinterpret_f32 (f32.demote_f64 (f64.promote_f32 (f32.reinterpret_i32 (local.get $$x)))))
+ (i32.const 0x7fc00000)))
+)`);
+
+// ./test/core/float_exprs.wast:2329
+assert_return(
+ () => invoke($87, `f32.arithmetic_nan_bitpattern`, [2139107856, 2139107856]),
+ [value("i32", 2143289344)],
+);
+
+// ./test/core/float_exprs.wast:2330
+assert_return(() => invoke($87, `f32.canonical_nan_bitpattern`, [0, 0]), [value("i32", 2143289344)]);
+
+// ./test/core/float_exprs.wast:2331
+assert_return(
+ () => invoke($87, `f32.canonical_nan_bitpattern`, [2143289344, 2143289344]),
+ [value("i32", 2143289344)],
+);
+
+// ./test/core/float_exprs.wast:2332
+assert_return(
+ () => invoke($87, `f32.canonical_nan_bitpattern`, [-4194304, 2143289344]),
+ [value("i32", 2143289344)],
+);
+
+// ./test/core/float_exprs.wast:2333
+assert_return(
+ () => invoke($87, `f32.canonical_nan_bitpattern`, [2143289344, -4194304]),
+ [value("i32", 2143289344)],
+);
+
+// ./test/core/float_exprs.wast:2334
+assert_return(
+ () => invoke($87, `f32.canonical_nan_bitpattern`, [-4194304, -4194304]),
+ [value("i32", 2143289344)],
+);
+
+// ./test/core/float_exprs.wast:2335
+assert_return(
+ () => invoke($87, `f32.nonarithmetic_nan_bitpattern`, [2143302160]),
+ [value("i32", -4181488)],
+);
+
+// ./test/core/float_exprs.wast:2336
+assert_return(
+ () => invoke($87, `f32.nonarithmetic_nan_bitpattern`, [-4181488]),
+ [value("i32", 2143302160)],
+);
+
+// ./test/core/float_exprs.wast:2337
+assert_return(
+ () => invoke($87, `f32.nonarithmetic_nan_bitpattern`, [2139107856]),
+ [value("i32", -8375792)],
+);
+
+// ./test/core/float_exprs.wast:2338
+assert_return(
+ () => invoke($87, `f32.nonarithmetic_nan_bitpattern`, [-8375792]),
+ [value("i32", 2139107856)],
+);
+
+// ./test/core/float_exprs.wast:2339
+assert_return(
+ () => invoke($87, `f64.arithmetic_nan_bitpattern`, [
+ 9218868437227418128n,
+ 9218868437227418128n,
+ ]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2340
+assert_return(
+ () => invoke($87, `f64.canonical_nan_bitpattern`, [0n, 0n]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2341
+assert_return(
+ () => invoke($87, `f64.canonical_nan_bitpattern`, [
+ 9221120237041090560n,
+ 9221120237041090560n,
+ ]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2342
+assert_return(
+ () => invoke($87, `f64.canonical_nan_bitpattern`, [
+ -2251799813685248n,
+ 9221120237041090560n,
+ ]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2343
+assert_return(
+ () => invoke($87, `f64.canonical_nan_bitpattern`, [
+ 9221120237041090560n,
+ -2251799813685248n,
+ ]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2344
+assert_return(
+ () => invoke($87, `f64.canonical_nan_bitpattern`, [
+ -2251799813685248n,
+ -2251799813685248n,
+ ]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2345
+assert_return(
+ () => invoke($87, `f64.nonarithmetic_nan_bitpattern`, [9221120237041103376n]),
+ [value("i64", -2251799813672432n)],
+);
+
+// ./test/core/float_exprs.wast:2346
+assert_return(
+ () => invoke($87, `f64.nonarithmetic_nan_bitpattern`, [-2251799813672432n]),
+ [value("i64", 9221120237041103376n)],
+);
+
+// ./test/core/float_exprs.wast:2347
+assert_return(
+ () => invoke($87, `f64.nonarithmetic_nan_bitpattern`, [9218868437227418128n]),
+ [value("i64", -4503599627357680n)],
+);
+
+// ./test/core/float_exprs.wast:2348
+assert_return(
+ () => invoke($87, `f64.nonarithmetic_nan_bitpattern`, [-4503599627357680n]),
+ [value("i64", 9218868437227418128n)],
+);
+
+// ./test/core/float_exprs.wast:2349
+assert_return(() => invoke($87, `f32.no_fold_sub_zero`, [2141192192]), [value("i32", 2143289344)]);
+
+// ./test/core/float_exprs.wast:2350
+assert_return(() => invoke($87, `f32.no_fold_neg0_sub`, [2141192192]), [value("i32", 2143289344)]);
+
+// ./test/core/float_exprs.wast:2351
+assert_return(() => invoke($87, `f32.no_fold_mul_one`, [2141192192]), [value("i32", 2143289344)]);
+
+// ./test/core/float_exprs.wast:2352
+assert_return(() => invoke($87, `f32.no_fold_neg1_mul`, [2141192192]), [value("i32", 2143289344)]);
+
+// ./test/core/float_exprs.wast:2353
+assert_return(() => invoke($87, `f32.no_fold_div_one`, [2141192192]), [value("i32", 2143289344)]);
+
+// ./test/core/float_exprs.wast:2354
+assert_return(() => invoke($87, `f32.no_fold_div_neg1`, [2141192192]), [value("i32", 2143289344)]);
+
+// ./test/core/float_exprs.wast:2355
+assert_return(
+ () => invoke($87, `f64.no_fold_sub_zero`, [9219994337134247936n]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2356
+assert_return(
+ () => invoke($87, `f64.no_fold_neg0_sub`, [9219994337134247936n]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2357
+assert_return(
+ () => invoke($87, `f64.no_fold_mul_one`, [9219994337134247936n]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2358
+assert_return(
+ () => invoke($87, `f64.no_fold_neg1_mul`, [9219994337134247936n]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2359
+assert_return(
+ () => invoke($87, `f64.no_fold_div_one`, [9219994337134247936n]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2360
+assert_return(
+ () => invoke($87, `f64.no_fold_div_neg1`, [9219994337134247936n]),
+ [value("i64", 9221120237041090560n)],
+);
+
+// ./test/core/float_exprs.wast:2361
+assert_return(() => invoke($87, `no_fold_promote_demote`, [2141192192]), [value("i32", 2143289344)]);
+
+// ./test/core/float_exprs.wast:2366
+let $88 = instantiate(`(module
+ (func (export "dot_product_example")
+ (param $$x0 f64) (param $$x1 f64) (param $$x2 f64) (param $$x3 f64)
+ (param $$y0 f64) (param $$y1 f64) (param $$y2 f64) (param $$y3 f64)
+ (result f64)
+ (f64.add (f64.add (f64.add
+ (f64.mul (local.get $$x0) (local.get $$y0))
+ (f64.mul (local.get $$x1) (local.get $$y1)))
+ (f64.mul (local.get $$x2) (local.get $$y2)))
+ (f64.mul (local.get $$x3) (local.get $$y3)))
+ )
+
+ (func (export "with_binary_sum_collapse")
+ (param $$x0 f64) (param $$x1 f64) (param $$x2 f64) (param $$x3 f64)
+ (param $$y0 f64) (param $$y1 f64) (param $$y2 f64) (param $$y3 f64)
+ (result f64)
+ (f64.add (f64.add (f64.mul (local.get $$x0) (local.get $$y0))
+ (f64.mul (local.get $$x1) (local.get $$y1)))
+ (f64.add (f64.mul (local.get $$x2) (local.get $$y2))
+ (f64.mul (local.get $$x3) (local.get $$y3))))
+ )
+)`);
+
+// ./test/core/float_exprs.wast:2389
+assert_return(
+ () => invoke($88, `dot_product_example`, [
+ value("f64", 32000000),
+ value("f64", 1),
+ value("f64", -1),
+ value("f64", 80000000),
+ value("f64", 40000000),
+ value("f64", 1),
+ value("f64", -1),
+ value("f64", -16000000),
+ ]),
+ [value("f64", 2)],
+);
+
+// ./test/core/float_exprs.wast:2393
+assert_return(
+ () => invoke($88, `with_binary_sum_collapse`, [
+ value("f64", 32000000),
+ value("f64", 1),
+ value("f64", -1),
+ value("f64", 80000000),
+ value("f64", 40000000),
+ value("f64", 1),
+ value("f64", -1),
+ value("f64", -16000000),
+ ]),
+ [value("f64", 2)],
+);
+
+// ./test/core/float_exprs.wast:2400
+let $89 = instantiate(`(module
+ (func (export "f32.contract2fma")
+ (param $$x f32) (param $$y f32) (result f32)
+ (f32.sqrt (f32.sub (f32.mul (local.get $$x) (local.get $$x))
+ (f32.mul (local.get $$y) (local.get $$y)))))
+ (func (export "f64.contract2fma")
+ (param $$x f64) (param $$y f64) (result f64)
+ (f64.sqrt (f64.sub (f64.mul (local.get $$x) (local.get $$x))
+ (f64.mul (local.get $$y) (local.get $$y)))))
+)`);
+
+// ./test/core/float_exprs.wast:2411
+assert_return(
+ () => invoke($89, `f32.contract2fma`, [value("f32", 1), value("f32", 1)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2412
+assert_return(
+ () => invoke($89, `f32.contract2fma`, [value("f32", 1.1), value("f32", 1.1)]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2413
+assert_return(
+ () => invoke($89, `f32.contract2fma`, [
+ value("f32", 1.1999999),
+ value("f32", 1.1999999),
+ ]),
+ [value("f32", 0)],
+);
+
+// ./test/core/float_exprs.wast:2414
+assert_return(
+ () => invoke($89, `f64.contract2fma`, [value("f64", 1), value("f64", 1)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:2415
+assert_return(
+ () => invoke($89, `f64.contract2fma`, [value("f64", 1.1), value("f64", 1.1)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:2416
+assert_return(
+ () => invoke($89, `f64.contract2fma`, [value("f64", 1.2), value("f64", 1.2)]),
+ [value("f64", 0)],
+);
+
+// ./test/core/float_exprs.wast:2421
+let $90 = instantiate(`(module
+ (func (export "f32.division_by_small_number")
+ (param $$a f32) (param $$b f32) (param $$c f32) (result f32)
+ (f32.sub (local.get $$a) (f32.div (local.get $$b) (local.get $$c))))
+ (func (export "f64.division_by_small_number")
+ (param $$a f64) (param $$b f64) (param $$c f64) (result f64)
+ (f64.sub (local.get $$a) (f64.div (local.get $$b) (local.get $$c))))
+)`);
+
+// ./test/core/float_exprs.wast:2430
+assert_return(
+ () => invoke($90, `f32.division_by_small_number`, [
+ value("f32", 112000000),
+ value("f32", 100000),
+ value("f32", 0.0009),
+ ]),
+ [value("f32", 888888)],
+);
+
+// ./test/core/float_exprs.wast:2431
+assert_return(
+ () => invoke($90, `f64.division_by_small_number`, [
+ value("f64", 112000000),
+ value("f64", 100000),
+ value("f64", 0.0009),
+ ]),
+ [value("f64", 888888.8888888806)],
+);
+
+// ./test/core/float_exprs.wast:2436
+let $91 = instantiate(`(module
+ (func (export "f32.golden_ratio") (param $$a f32) (param $$b f32) (param $$c f32) (result f32)
+ (f32.mul (local.get 0) (f32.add (local.get 1) (f32.sqrt (local.get 2)))))
+ (func (export "f64.golden_ratio") (param $$a f64) (param $$b f64) (param $$c f64) (result f64)
+ (f64.mul (local.get 0) (f64.add (local.get 1) (f64.sqrt (local.get 2)))))
+)`);
+
+// ./test/core/float_exprs.wast:2443
+assert_return(
+ () => invoke($91, `f32.golden_ratio`, [
+ value("f32", 0.5),
+ value("f32", 1),
+ value("f32", 5),
+ ]),
+ [value("f32", 1.618034)],
+);
+
+// ./test/core/float_exprs.wast:2444
+assert_return(
+ () => invoke($91, `f64.golden_ratio`, [
+ value("f64", 0.5),
+ value("f64", 1),
+ value("f64", 5),
+ ]),
+ [value("f64", 1.618033988749895)],
+);
+
+// ./test/core/float_exprs.wast:2449
+let $92 = instantiate(`(module
+ (func (export "f32.silver_means") (param $$n f32) (result f32)
+ (f32.mul (f32.const 0.5)
+ (f32.add (local.get $$n)
+ (f32.sqrt (f32.add (f32.mul (local.get $$n) (local.get $$n))
+ (f32.const 4.0))))))
+ (func (export "f64.silver_means") (param $$n f64) (result f64)
+ (f64.mul (f64.const 0.5)
+ (f64.add (local.get $$n)
+ (f64.sqrt (f64.add (f64.mul (local.get $$n) (local.get $$n))
+ (f64.const 4.0))))))
+)`);
+
+// ./test/core/float_exprs.wast:2462
+assert_return(() => invoke($92, `f32.silver_means`, [value("f32", 0)]), [value("f32", 1)]);
+
+// ./test/core/float_exprs.wast:2463
+assert_return(() => invoke($92, `f32.silver_means`, [value("f32", 1)]), [value("f32", 1.618034)]);
+
+// ./test/core/float_exprs.wast:2464
+assert_return(() => invoke($92, `f32.silver_means`, [value("f32", 2)]), [value("f32", 2.4142137)]);
+
+// ./test/core/float_exprs.wast:2465
+assert_return(() => invoke($92, `f32.silver_means`, [value("f32", 3)]), [value("f32", 3.3027756)]);
+
+// ./test/core/float_exprs.wast:2466
+assert_return(() => invoke($92, `f32.silver_means`, [value("f32", 4)]), [value("f32", 4.236068)]);
+
+// ./test/core/float_exprs.wast:2467
+assert_return(() => invoke($92, `f32.silver_means`, [value("f32", 5)]), [value("f32", 5.192582)]);
+
+// ./test/core/float_exprs.wast:2468
+assert_return(() => invoke($92, `f64.silver_means`, [value("f64", 0)]), [value("f64", 1)]);
+
+// ./test/core/float_exprs.wast:2469
+assert_return(
+ () => invoke($92, `f64.silver_means`, [value("f64", 1)]),
+ [value("f64", 1.618033988749895)],
+);
+
+// ./test/core/float_exprs.wast:2470
+assert_return(
+ () => invoke($92, `f64.silver_means`, [value("f64", 2)]),
+ [value("f64", 2.414213562373095)],
+);
+
+// ./test/core/float_exprs.wast:2471
+assert_return(
+ () => invoke($92, `f64.silver_means`, [value("f64", 3)]),
+ [value("f64", 3.302775637731995)],
+);
+
+// ./test/core/float_exprs.wast:2472
+assert_return(
+ () => invoke($92, `f64.silver_means`, [value("f64", 4)]),
+ [value("f64", 4.23606797749979)],
+);
+
+// ./test/core/float_exprs.wast:2473
+assert_return(
+ () => invoke($92, `f64.silver_means`, [value("f64", 5)]),
+ [value("f64", 5.192582403567252)],
+);
+
+// ./test/core/float_exprs.wast:2478
+let $93 = instantiate(`(module
+ (func (export "point_four") (param $$four f64) (param $$ten f64) (result i32)
+ (f64.lt (f64.div (local.get $$four) (local.get $$ten)) (f64.const 0.4)))
+)`);
+
+// ./test/core/float_exprs.wast:2483
+assert_return(() => invoke($93, `point_four`, [value("f64", 4), value("f64", 10)]), [value("i32", 0)]);
+
+// ./test/core/float_exprs.wast:2488
+let $94 = instantiate(`(module
+ (func (export "tau") (param i32) (result f64)
+ (local f64 f64 f64 f64)
+ f64.const 0x0p+0
+ local.set 1
+ block
+ local.get 0
+ i32.const 1
+ i32.lt_s
+ br_if 0
+ f64.const 0x1p+0
+ local.set 2
+ f64.const 0x0p+0
+ local.set 3
+ loop
+ local.get 1
+ local.get 2
+ f64.const 0x1p+3
+ local.get 3
+ f64.const 0x1p+3
+ f64.mul
+ local.tee 4
+ f64.const 0x1p+0
+ f64.add
+ f64.div
+ f64.const 0x1p+2
+ local.get 4
+ f64.const 0x1p+2
+ f64.add
+ f64.div
+ f64.sub
+ f64.const 0x1p+1
+ local.get 4
+ f64.const 0x1.4p+2
+ f64.add
+ f64.div
+ f64.sub
+ f64.const 0x1p+1
+ local.get 4
+ f64.const 0x1.8p+2
+ f64.add
+ f64.div
+ f64.sub
+ f64.mul
+ f64.add
+ local.set 1
+ local.get 3
+ f64.const 0x1p+0
+ f64.add
+ local.set 3
+ local.get 2
+ f64.const 0x1p-4
+ f64.mul
+ local.set 2
+ local.get 0
+ i32.const -1
+ i32.add
+ local.tee 0
+ br_if 0
+ end
+ end
+ local.get 1
+ )
+)`);
+
+// ./test/core/float_exprs.wast:2553
+assert_return(() => invoke($94, `tau`, [10]), [value("f64", 6.283185307179583)]);
+
+// ./test/core/float_exprs.wast:2554
+assert_return(() => invoke($94, `tau`, [11]), [value("f64", 6.283185307179586)]);
+
+// ./test/core/float_exprs.wast:2558
+let $95 = instantiate(`(module
+ (func (export "f32.no_fold_conditional_inc") (param $$x f32) (param $$y f32) (result f32)
+ (select (local.get $$x)
+ (f32.add (local.get $$x) (f32.const 1.0))
+ (f32.lt (local.get $$y) (f32.const 0.0))))
+ (func (export "f64.no_fold_conditional_inc") (param $$x f64) (param $$y f64) (result f64)
+ (select (local.get $$x)
+ (f64.add (local.get $$x) (f64.const 1.0))
+ (f64.lt (local.get $$y) (f64.const 0.0))))
+)`);
+
+// ./test/core/float_exprs.wast:2569
+assert_return(
+ () => invoke($95, `f32.no_fold_conditional_inc`, [value("f32", -0), value("f32", -1)]),
+ [value("f32", -0)],
+);
+
+// ./test/core/float_exprs.wast:2570
+assert_return(
+ () => invoke($95, `f64.no_fold_conditional_inc`, [value("f64", -0), value("f64", -1)]),
+ [value("f64", -0)],
+);