1 ;; Test floating-point literal parsing.
5 (func (export "f32.nan") (result i32) (i32.reinterpret_f32 (f32.const nan)))
6 (func (export "f32.positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan)))
7 (func (export "f32.negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan)))
8 (func (export "f32.plain_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x400000)))
9 (func (export "f32.informally_known_as_plain_snan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x200000)))
10 (func (export "f32.all_ones_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x7fffff)))
11 (func (export "f32.misc_nan") (result i32) (i32.reinterpret_f32 (f32.const nan:0x012345)))
12 (func (export "f32.misc_positive_nan") (result i32) (i32.reinterpret_f32 (f32.const +nan:0x304050)))
13 (func (export "f32.misc_negative_nan") (result i32) (i32.reinterpret_f32 (f32.const -nan:0x2abcde)))
14 (func (export "f32.infinity") (result i32) (i32.reinterpret_f32 (f32.const inf)))
15 (func (export "f32.positive_infinity") (result i32) (i32.reinterpret_f32 (f32.const +inf)))
16 (func (export "f32.negative_infinity") (result i32) (i32.reinterpret_f32 (f32.const -inf)))
19 (func (export "f32.zero") (result i32) (i32.reinterpret_f32 (f32.const 0x0.0p0)))
20 (func (export "f32.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0x0.0p0)))
21 (func (export "f32.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0x0.0p0)))
22 (func (export "f32.misc") (result i32) (i32.reinterpret_f32 (f32.const 0x1.921fb6p+2)))
23 (func (export "f32.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-149)))
24 (func (export "f32.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 0x1p-126)))
25 (func (export "f32.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffep+127)))
26 (func (export "f32.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 0x1.fffffcp-127)))
27 (func (export "f32.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 0x1.p10)))
29 ;; f32 in decimal format
30 (func (export "f32_dec.zero") (result i32) (i32.reinterpret_f32 (f32.const 0.0e0)))
31 (func (export "f32_dec.positive_zero") (result i32) (i32.reinterpret_f32 (f32.const +0.0e0)))
32 (func (export "f32_dec.negative_zero") (result i32) (i32.reinterpret_f32 (f32.const -0.0e0)))
33 (func (export "f32_dec.misc") (result i32) (i32.reinterpret_f32 (f32.const 6.28318548202514648)))
34 (func (export "f32_dec.min_positive") (result i32) (i32.reinterpret_f32 (f32.const 1.4013e-45)))
35 (func (export "f32_dec.min_normal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754944e-38)))
36 (func (export "f32_dec.max_subnormal") (result i32) (i32.reinterpret_f32 (f32.const 1.1754942e-38)))
37 (func (export "f32_dec.max_finite") (result i32) (i32.reinterpret_f32 (f32.const 3.4028234e+38)))
38 (func (export "f32_dec.trailing_dot") (result i32) (i32.reinterpret_f32 (f32.const 1.e10)))
40 ;; https://twitter.com/Archivd/status/994637336506912768
41 (func (export "f32_dec.root_beer_float") (result i32) (i32.reinterpret_f32 (f32.const 1.000000119)))
44 (func (export "f64.nan") (result i64) (i64.reinterpret_f64 (f64.const nan)))
45 (func (export "f64.positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan)))
46 (func (export "f64.negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan)))
47 (func (export "f64.plain_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x8000000000000)))
48 (func (export "f64.informally_known_as_plain_snan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x4000000000000)))
49 (func (export "f64.all_ones_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0xfffffffffffff)))
50 (func (export "f64.misc_nan") (result i64) (i64.reinterpret_f64 (f64.const nan:0x0123456789abc)))
51 (func (export "f64.misc_positive_nan") (result i64) (i64.reinterpret_f64 (f64.const +nan:0x3040506070809)))
52 (func (export "f64.misc_negative_nan") (result i64) (i64.reinterpret_f64 (f64.const -nan:0x2abcdef012345)))
53 (func (export "f64.infinity") (result i64) (i64.reinterpret_f64 (f64.const inf)))
54 (func (export "f64.positive_infinity") (result i64) (i64.reinterpret_f64 (f64.const +inf)))
55 (func (export "f64.negative_infinity") (result i64) (i64.reinterpret_f64 (f64.const -inf)))
58 (func (export "f64.zero") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0p0)))
59 (func (export "f64.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0x0.0p0)))
60 (func (export "f64.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0x0.0p0)))
61 (func (export "f64.misc") (result i64) (i64.reinterpret_f64 (f64.const 0x1.921fb54442d18p+2)))
62 (func (export "f64.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 0x0.0000000000001p-1022)))
63 (func (export "f64.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 0x1p-1022)))
64 (func (export "f64.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 0x0.fffffffffffffp-1022)))
65 (func (export "f64.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 0x1.fffffffffffffp+1023)))
66 (func (export "f64.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 0x1.p100)))
68 ;; f64 numbers in decimal format
69 (func (export "f64_dec.zero") (result i64) (i64.reinterpret_f64 (f64.const 0.0e0)))
70 (func (export "f64_dec.positive_zero") (result i64) (i64.reinterpret_f64 (f64.const +0.0e0)))
71 (func (export "f64_dec.negative_zero") (result i64) (i64.reinterpret_f64 (f64.const -0.0e0)))
72 (func (export "f64_dec.misc") (result i64) (i64.reinterpret_f64 (f64.const 6.28318530717958623)))
73 (func (export "f64_dec.min_positive") (result i64) (i64.reinterpret_f64 (f64.const 4.94066e-324)))
74 (func (export "f64_dec.min_normal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072012e-308)))
75 (func (export "f64_dec.max_subnormal") (result i64) (i64.reinterpret_f64 (f64.const 2.2250738585072011e-308)))
76 (func (export "f64_dec.max_finite") (result i64) (i64.reinterpret_f64 (f64.const 1.7976931348623157e+308)))
77 (func (export "f64_dec.trailing_dot") (result i64) (i64.reinterpret_f64 (f64.const 1.e100)))
79 ;; https://twitter.com/Archivd/status/994637336506912768
80 (func (export "f64_dec.root_beer_float") (result i64) (i64.reinterpret_f64 (f64.const 1.000000119)))
82 (func (export "f32-dec-sep1") (result f32) (f32.const 1_000_000))
83 (func (export "f32-dec-sep2") (result f32) (f32.const 1_0_0_0))
84 (func (export "f32-dec-sep3") (result f32) (f32.const 100_3.141_592))
85 (func (export "f32-dec-sep4") (result f32) (f32.const 99e+1_3))
86 (func (export "f32-dec-sep5") (result f32) (f32.const 122_000.11_3_54E0_2_3))
87 (func (export "f32-hex-sep1") (result f32) (f32.const 0xa_0f_00_99))
88 (func (export "f32-hex-sep2") (result f32) (f32.const 0x1_a_A_0_f))
89 (func (export "f32-hex-sep3") (result f32) (f32.const 0xa0_ff.f141_a59a))
90 (func (export "f32-hex-sep4") (result f32) (f32.const 0xf0P+1_3))
91 (func (export "f32-hex-sep5") (result f32) (f32.const 0x2a_f00a.1f_3_eep2_3))
93 (func (export "f64-dec-sep1") (result f64) (f64.const 1_000_000))
94 (func (export "f64-dec-sep2") (result f64) (f64.const 1_0_0_0))
95 (func (export "f64-dec-sep3") (result f64) (f64.const 100_3.141_592))
96 (func (export "f64-dec-sep4") (result f64) (f64.const 99e-1_23))
97 (func (export "f64-dec-sep5") (result f64) (f64.const 122_000.11_3_54e0_2_3))
98 (func (export "f64-hex-sep1") (result f64) (f64.const 0xa_f00f_0000_9999))
99 (func (export "f64-hex-sep2") (result f64) (f64.const 0x1_a_A_0_f))
100 (func (export "f64-hex-sep3") (result f64) (f64.const 0xa0_ff.f141_a59a))
101 (func (export "f64-hex-sep4") (result f64) (f64.const 0xf0P+1_3))
102 (func (export "f64-hex-sep5") (result f64) (f64.const 0x2a_f00a.1f_3_eep2_3))
105 (assert_return (invoke "f32.nan") (i32.const 0x7fc00000))
106 (assert_return (invoke "f32.positive_nan") (i32.const 0x7fc00000))
107 (assert_return (invoke "f32.negative_nan") (i32.const 0xffc00000))
108 (assert_return (invoke "f32.plain_nan") (i32.const 0x7fc00000))
109 (assert_return (invoke "f32.informally_known_as_plain_snan") (i32.const 0x7fa00000))
110 (assert_return (invoke "f32.all_ones_nan") (i32.const 0xffffffff))
111 (assert_return (invoke "f32.misc_nan") (i32.const 0x7f812345))
112 (assert_return (invoke "f32.misc_positive_nan") (i32.const 0x7fb04050))
113 (assert_return (invoke "f32.misc_negative_nan") (i32.const 0xffaabcde))
114 (assert_return (invoke "f32.infinity") (i32.const 0x7f800000))
115 (assert_return (invoke "f32.positive_infinity") (i32.const 0x7f800000))
116 (assert_return (invoke "f32.negative_infinity") (i32.const 0xff800000))
117 (assert_return (invoke "f32.zero") (i32.const 0))
118 (assert_return (invoke "f32.positive_zero") (i32.const 0))
119 (assert_return (invoke "f32.negative_zero") (i32.const 0x80000000))
120 (assert_return (invoke "f32.misc") (i32.const 0x40c90fdb))
121 (assert_return (invoke "f32.min_positive") (i32.const 1))
122 (assert_return (invoke "f32.min_normal") (i32.const 0x800000))
123 (assert_return (invoke "f32.max_subnormal") (i32.const 0x7fffff))
124 (assert_return (invoke "f32.max_finite") (i32.const 0x7f7fffff))
125 (assert_return (invoke "f32.trailing_dot") (i32.const 0x44800000))
126 (assert_return (invoke "f32_dec.zero") (i32.const 0))
127 (assert_return (invoke "f32_dec.positive_zero") (i32.const 0))
128 (assert_return (invoke "f32_dec.negative_zero") (i32.const 0x80000000))
129 (assert_return (invoke "f32_dec.misc") (i32.const 0x40c90fdb))
130 (assert_return (invoke "f32_dec.min_positive") (i32.const 1))
131 (assert_return (invoke "f32_dec.min_normal") (i32.const 0x800000))
132 (assert_return (invoke "f32_dec.max_subnormal") (i32.const 0x7fffff))
133 (assert_return (invoke "f32_dec.max_finite") (i32.const 0x7f7fffff))
134 (assert_return (invoke "f32_dec.trailing_dot") (i32.const 0x501502f9))
135 (assert_return (invoke "f32_dec.root_beer_float") (i32.const 0x3f800001))
137 (assert_return (invoke "f64.nan") (i64.const 0x7ff8000000000000))
138 (assert_return (invoke "f64.positive_nan") (i64.const 0x7ff8000000000000))
139 (assert_return (invoke "f64.negative_nan") (i64.const 0xfff8000000000000))
140 (assert_return (invoke "f64.plain_nan") (i64.const 0x7ff8000000000000))
141 (assert_return (invoke "f64.informally_known_as_plain_snan") (i64.const 0x7ff4000000000000))
142 (assert_return (invoke "f64.all_ones_nan") (i64.const 0xffffffffffffffff))
143 (assert_return (invoke "f64.misc_nan") (i64.const 0x7ff0123456789abc))
144 (assert_return (invoke "f64.misc_positive_nan") (i64.const 0x7ff3040506070809))
145 (assert_return (invoke "f64.misc_negative_nan") (i64.const 0xfff2abcdef012345))
146 (assert_return (invoke "f64.infinity") (i64.const 0x7ff0000000000000))
147 (assert_return (invoke "f64.positive_infinity") (i64.const 0x7ff0000000000000))
148 (assert_return (invoke "f64.negative_infinity") (i64.const 0xfff0000000000000))
149 (assert_return (invoke "f64.zero") (i64.const 0))
150 (assert_return (invoke "f64.positive_zero") (i64.const 0))
151 (assert_return (invoke "f64.negative_zero") (i64.const 0x8000000000000000))
152 (assert_return (invoke "f64.misc") (i64.const 0x401921fb54442d18))
153 (assert_return (invoke "f64.min_positive") (i64.const 1))
154 (assert_return (invoke "f64.min_normal") (i64.const 0x10000000000000))
155 (assert_return (invoke "f64.max_subnormal") (i64.const 0xfffffffffffff))
156 (assert_return (invoke "f64.max_finite") (i64.const 0x7fefffffffffffff))
157 (assert_return (invoke "f64.trailing_dot") (i64.const 0x4630000000000000))
158 (assert_return (invoke "f64_dec.zero") (i64.const 0))
159 (assert_return (invoke "f64_dec.positive_zero") (i64.const 0))
160 (assert_return (invoke "f64_dec.negative_zero") (i64.const 0x8000000000000000))
161 (assert_return (invoke "f64_dec.misc") (i64.const 0x401921fb54442d18))
162 (assert_return (invoke "f64_dec.min_positive") (i64.const 1))
163 (assert_return (invoke "f64_dec.min_normal") (i64.const 0x10000000000000))
164 (assert_return (invoke "f64_dec.max_subnormal") (i64.const 0xfffffffffffff))
165 (assert_return (invoke "f64_dec.max_finite") (i64.const 0x7fefffffffffffff))
166 (assert_return (invoke "f64_dec.trailing_dot") (i64.const 0x54b249ad2594c37d))
167 (assert_return (invoke "f64_dec.root_beer_float") (i64.const 0x3ff000001ff19e24))
169 (assert_return (invoke "f32-dec-sep1") (f32.const 1000000))
170 (assert_return (invoke "f32-dec-sep2") (f32.const 1000))
171 (assert_return (invoke "f32-dec-sep3") (f32.const 1003.141592))
172 (assert_return (invoke "f32-dec-sep4") (f32.const 99e+13))
173 (assert_return (invoke "f32-dec-sep5") (f32.const 122000.11354e23))
174 (assert_return (invoke "f32-hex-sep1") (f32.const 0xa0f0099))
175 (assert_return (invoke "f32-hex-sep2") (f32.const 0x1aa0f))
176 (assert_return (invoke "f32-hex-sep3") (f32.const 0xa0ff.f141a59a))
177 (assert_return (invoke "f32-hex-sep4") (f32.const 0xf0P+13))
178 (assert_return (invoke "f32-hex-sep5") (f32.const 0x2af00a.1f3eep23))
180 (assert_return (invoke "f64-dec-sep1") (f64.const 1000000))
181 (assert_return (invoke "f64-dec-sep2") (f64.const 1000))
182 (assert_return (invoke "f64-dec-sep3") (f64.const 1003.141592))
183 (assert_return (invoke "f64-dec-sep4") (f64.const 99e-123))
184 (assert_return (invoke "f64-dec-sep5") (f64.const 122000.11354e23))
185 (assert_return (invoke "f64-hex-sep1") (f64.const 0xaf00f00009999))
186 (assert_return (invoke "f64-hex-sep2") (f64.const 0x1aa0f))
187 (assert_return (invoke "f64-hex-sep3") (f64.const 0xa0ff.f141a59a))
188 (assert_return (invoke "f64-hex-sep4") (f64.const 0xf0P+13))
189 (assert_return (invoke "f64-hex-sep5") (f64.const 0x2af00a.1f3eep23))
191 ;; Test parsing a float from binary
193 ;; (func (export "4294967249") (result f64) (f64.const 4294967249))
194 "\00\61\73\6d\01\00\00\00\01\85\80\80\80\00\01\60"
195 "\00\01\7c\03\82\80\80\80\00\01\00\07\8e\80\80\80"
196 "\00\01\0a\34\32\39\34\39\36\37\32\34\39\00\00\0a"
197 "\91\80\80\80\00\01\8b\80\80\80\00\00\44\00\00\20"
201 (assert_return (invoke "4294967249") (f64.const 4294967249))
204 (module quote "(global f32 (f32.const _100))")
208 (module quote "(global f32 (f32.const +_100))")
212 (module quote "(global f32 (f32.const -_100))")
216 (module quote "(global f32 (f32.const 99_))")
220 (module quote "(global f32 (f32.const 1__000))")
224 (module quote "(global f32 (f32.const _1.0))")
228 (module quote "(global f32 (f32.const 1.0_))")
232 (module quote "(global f32 (f32.const 1_.0))")
236 (module quote "(global f32 (f32.const 1._0))")
240 (module quote "(global f32 (f32.const _1e1))")
244 (module quote "(global f32 (f32.const 1e1_))")
248 (module quote "(global f32 (f32.const 1_e1))")
252 (module quote "(global f32 (f32.const 1e_1))")
256 (module quote "(global f32 (f32.const _1.0e1))")
260 (module quote "(global f32 (f32.const 1.0e1_))")
264 (module quote "(global f32 (f32.const 1.0_e1))")
268 (module quote "(global f32 (f32.const 1.0e_1))")
272 (module quote "(global f32 (f32.const 1.0e+_1))")
276 (module quote "(global f32 (f32.const 1.0e_+1))")
280 (module quote "(global f32 (f32.const _0x100))")
284 (module quote "(global f32 (f32.const 0_x100))")
288 (module quote "(global f32 (f32.const 0x_100))")
292 (module quote "(global f32 (f32.const 0x00_))")
296 (module quote "(global f32 (f32.const 0xff__ffff))")
300 (module quote "(global f32 (f32.const 0x_1.0))")
304 (module quote "(global f32 (f32.const 0x1.0_))")
308 (module quote "(global f32 (f32.const 0x1_.0))")
312 (module quote "(global f32 (f32.const 0x1._0))")
316 (module quote "(global f32 (f32.const 0x_1p1))")
320 (module quote "(global f32 (f32.const 0x1p1_))")
324 (module quote "(global f32 (f32.const 0x1_p1))")
328 (module quote "(global f32 (f32.const 0x1p_1))")
332 (module quote "(global f32 (f32.const 0x_1.0p1))")
336 (module quote "(global f32 (f32.const 0x1.0p1_))")
340 (module quote "(global f32 (f32.const 0x1.0_p1))")
344 (module quote "(global f32 (f32.const 0x1.0p_1))")
348 (module quote "(global f32 (f32.const 0x1.0p+_1))")
352 (module quote "(global f32 (f32.const 0x1.0p_+1))")
357 (module quote "(global f64 (f64.const _100))")
361 (module quote "(global f64 (f64.const +_100))")
365 (module quote "(global f64 (f64.const -_100))")
369 (module quote "(global f64 (f64.const 99_))")
373 (module quote "(global f64 (f64.const 1__000))")
377 (module quote "(global f64 (f64.const _1.0))")
381 (module quote "(global f64 (f64.const 1.0_))")
385 (module quote "(global f64 (f64.const 1_.0))")
389 (module quote "(global f64 (f64.const 1._0))")
393 (module quote "(global f64 (f64.const _1e1))")
397 (module quote "(global f64 (f64.const 1e1_))")
401 (module quote "(global f64 (f64.const 1_e1))")
405 (module quote "(global f64 (f64.const 1e_1))")
409 (module quote "(global f64 (f64.const _1.0e1))")
413 (module quote "(global f64 (f64.const 1.0e1_))")
417 (module quote "(global f64 (f64.const 1.0_e1))")
421 (module quote "(global f64 (f64.const 1.0e_1))")
425 (module quote "(global f64 (f64.const 1.0e+_1))")
429 (module quote "(global f64 (f64.const 1.0e_+1))")
433 (module quote "(global f64 (f64.const _0x100))")
437 (module quote "(global f64 (f64.const 0_x100))")
441 (module quote "(global f64 (f64.const 0x_100))")
445 (module quote "(global f64 (f64.const 0x00_))")
449 (module quote "(global f64 (f64.const 0xff__ffff))")
453 (module quote "(global f64 (f64.const 0x_1.0))")
457 (module quote "(global f64 (f64.const 0x1.0_))")
461 (module quote "(global f64 (f64.const 0x1_.0))")
465 (module quote "(global f64 (f64.const 0x1._0))")
469 (module quote "(global f64 (f64.const 0x_1p1))")
473 (module quote "(global f64 (f64.const 0x1p1_))")
477 (module quote "(global f64 (f64.const 0x1_p1))")
481 (module quote "(global f64 (f64.const 0x1p_1))")
485 (module quote "(global f64 (f64.const 0x_1.0p1))")
489 (module quote "(global f64 (f64.const 0x1.0p1_))")
493 (module quote "(global f64 (f64.const 0x1.0_p1))")
497 (module quote "(global f64 (f64.const 0x1.0p_1))")
501 (module quote "(global f64 (f64.const 0x1.0p+_1))")
505 (module quote "(global f64 (f64.const 0x1.0p_+1))")