1+ (module
2+ (import " env" " print_string" (func $print.string (param i32 i32 )))
3+ (import " env" " print_int" (func $print.int (param i32 )))
4+
5+ (func (export " i64.extend_i32_s" ) (param $x i32 ) (result i64 ) (i64.extend_i32_s (local.get $x )))
6+ (func (export " i64.extend_i32_u" ) (param $x i32 ) (result i64 ) (i64.extend_i32_u (local.get $x )))
7+ (func (export " i32.wrap_i64" ) (param $x i64 ) (result i32 ) (i32.wrap_i64 (local.get $x )))
8+ (func (export " i32.trunc_f32_s" ) (param $x f32 ) (result i32 ) (i32.trunc_f32_s (local.get $x )))
9+ (func (export " i32.trunc_f32_u" ) (param $x f32 ) (result i32 ) (i32.trunc_f32_u (local.get $x )))
10+ (func (export " i32.trunc_f64_s" ) (param $x f64 ) (result i32 ) (i32.trunc_f64_s (local.get $x )))
11+ (func (export " i32.trunc_f64_u" ) (param $x f64 ) (result i32 ) (i32.trunc_f64_u (local.get $x )))
12+ (func (export " i64.trunc_f32_s" ) (param $x f32 ) (result i64 ) (i64.trunc_f32_s (local.get $x )))
13+ (func (export " i64.trunc_f32_u" ) (param $x f32 ) (result i64 ) (i64.trunc_f32_u (local.get $x )))
14+ (func (export " i64.trunc_f64_s" ) (param $x f64 ) (result i64 ) (i64.trunc_f64_s (local.get $x )))
15+ (func (export " i64.trunc_f64_u" ) (param $x f64 ) (result i64 ) (i64.trunc_f64_u (local.get $x )))
16+ (func (export " f32.convert_i32_s" ) (param $x i32 ) (result f32 ) (f32.convert_i32_s (local.get $x )))
17+ (func (export " f32.convert_i64_s" ) (param $x i64 ) (result f32 ) (f32.convert_i64_s (local.get $x )))
18+ (func (export " f64.convert_i32_s" ) (param $x i32 ) (result f64 ) (f64.convert_i32_s (local.get $x )))
19+ (func (export " f64.convert_i64_s" ) (param $x i64 ) (result f64 ) (f64.convert_i64_s (local.get $x )))
20+ (func (export " f32.convert_i32_u" ) (param $x i32 ) (result f32 ) (f32.convert_i32_u (local.get $x )))
21+ (func (export " f32.convert_i64_u" ) (param $x i64 ) (result f32 ) (f32.convert_i64_u (local.get $x )))
22+ (func (export " f64.convert_i32_u" ) (param $x i32 ) (result f64 ) (f64.convert_i32_u (local.get $x )))
23+ (func (export " f64.convert_i64_u" ) (param $x i64 ) (result f64 ) (f64.convert_i64_u (local.get $x )))
24+ (func (export " f64.promote_f32" ) (param $x f32 ) (result f64 ) (f64.promote_f32 (local.get $x )))
25+ (func (export " f32.demote_f64" ) (param $x f64 ) (result f32 ) (f32.demote_f64 (local.get $x )))
26+ (func (export " f32.reinterpret_i32" ) (param $x i32 ) (result f32 ) (f32.reinterpret_i32 (local.get $x )))
27+ (func (export " f64.reinterpret_i64" ) (param $x i64 ) (result f64 ) (f64.reinterpret_i64 (local.get $x )))
28+ (func (export " i32.reinterpret_f32" ) (param $x f32 ) (result i32 ) (i32.reinterpret_f32 (local.get $x )))
29+ (func (export " i64.reinterpret_f64" ) (param $x f64 ) (result i64 ) (i64.reinterpret_f64 (local.get $x )))
30+
31+ (func $i64.print_equal (param $actual i64 ) (param $expected i64 )
32+ (call $print.int (i64.eq (local.get $actual ) (local.get $expected )))
33+ )
34+
35+ (func (export " main" )
36+ ;; test all
37+ ;; FAIL ((invoke "f32.convert_i64_s" (i64.const 0x7fffff4000000001)) (f32.const 0x1.fffffep+62))
38+ ;; failure: Expected 9223371487098962000 got 0
39+ ;; FAIL ((invoke "f32.convert_i64_s" (i64.const 0x8000004000000001)) (f32.const -0x1.fffffep+62))
40+ ;; failure: Expected -9223371487098962000 got 0
41+ ;; FAIL ((invoke "f32.convert_i64_s" (i64.const 0x0020000020000001)) (f32.const 0x1.000002p+53))
42+ ;; failure: Expected 9007200328482816 got 536870912
43+ ;; FAIL ((invoke "f32.convert_i64_s" (i64.const 0xffdfffffdfffffff)) (f32.const -0x1.000002p+53))
44+ ;; failure: Expected -9007200328482816 got -536870912
45+
46+ ;; test the failing cases
47+ ;; (i64.reinterpret_f64 (f64.const -nan:0x4000000000000))
48+ ;; (i64.const 0xfff4000000000000)
49+ ;; (i64.eq)
50+ ;; (call $print.int)
51+
52+
53+ ;; (assert_return (invoke "i64.extend_i32_s" (i32.const 0)) (i64.const 0))
54+ ;; (assert_return (invoke "i64.extend_i32_s" (i32.const 10000)) (i64.const 10000))
55+ ;; (assert_return (invoke "i64.extend_i32_s" (i32.const -10000)) (i64.const -10000))
56+ ;; (assert_return (invoke "i64.extend_i32_s" (i32.const -1)) (i64.const -1))
57+ ;; (assert_return (invoke "i64.extend_i32_s" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff))
58+ ;; (assert_return (invoke "i64.extend_i32_s" (i32.const 0x80000000)) (i64.const 0xffffffff80000000))
59+
60+ ;; (assert_return (invoke "i64.extend_i32_u" (i32.const 0)) (i64.const 0))
61+ ;; (assert_return (invoke "i64.extend_i32_u" (i32.const 10000)) (i64.const 10000))
62+ ;; (assert_return (invoke "i64.extend_i32_u" (i32.const -10000)) (i64.const 0x00000000ffffd8f0))
63+ ;; (assert_return (invoke "i64.extend_i32_u" (i32.const -1)) (i64.const 0xffffffff))
64+ ;; (assert_return (invoke "i64.extend_i32_u" (i32.const 0x7fffffff)) (i64.const 0x000000007fffffff))
65+ ;; (assert_return (invoke "i64.extend_i32_u" (i32.const 0x80000000)) (i64.const 0x0000000080000000))
66+
67+ ;; tests for i64
68+ ;; (assert_return (invoke "extend8_s" (i64.const 0)) (i64.const 0))
69+ ;; (assert_return (invoke "extend8_s" (i64.const 0x7f)) (i64.const 127))
70+ ;; (assert_return (invoke "extend8_s" (i64.const 0x80)) (i64.const -128))
71+ ;; (assert_return (invoke "extend8_s" (i64.const 0xff)) (i64.const -1))
72+ ;; (assert_return (invoke "extend8_s" (i64.const 0x01234567_89abcd_00)) (i64.const 0))
73+ ;; (assert_return (invoke "extend8_s" (i64.const 0xfedcba98_765432_80)) (i64.const -0x80))
74+ ;; (assert_return (invoke "extend8_s" (i64.const -1)) (i64.const -1))
75+
76+ ;; (assert_return (invoke "extend16_s" (i64.const 0)) (i64.const 0))
77+ ;; (assert_return (invoke "extend16_s" (i64.const 0x7fff)) (i64.const 32767))
78+ ;; (assert_return (invoke "extend16_s" (i64.const 0x8000)) (i64.const -32768))
79+ ;; (assert_return (invoke "extend16_s" (i64.const 0xffff)) (i64.const -1))
80+ ;; (assert_return (invoke "extend16_s" (i64.const 0x12345678_9abc_0000)) (i64.const 0))
81+ ;; (assert_return (invoke "extend16_s" (i64.const 0xfedcba98_7654_8000)) (i64.const -0x8000))
82+ ;; (assert_return (invoke "extend16_s" (i64.const -1)) (i64.const -1))
83+
84+ ;; (assert_return (invoke "extend32_s" (i64.const 0)) (i64.const 0))
85+ ;; (assert_return (invoke "extend32_s" (i64.const 0x7fff)) (i64.const 32767))
86+ ;; (assert_return (invoke "extend32_s" (i64.const 0x8000)) (i64.const 32768))
87+ ;; (assert_return (invoke "extend32_s" (i64.const 0xffff)) (i64.const 65535))
88+ ;; (assert_return (invoke "extend32_s" (i64.const 0x7fffffff)) (i64.const 0x7fffffff))
89+ ;; (assert_return (invoke "extend32_s" (i64.const 0x80000000)) (i64.const -0x80000000))
90+ ;; (assert_return (invoke "extend32_s" (i64.const 0xffffffff)) (i64.const -1))
91+ ;; (assert_return (invoke "extend32_s" (i64.const 0x01234567_00000000)) (i64.const 0))
92+ ;; (assert_return (invoke "extend32_s" (i64.const 0xfedcba98_80000000)) (i64.const -0x80000000))
93+ ;; (assert_return (invoke "extend32_s" (i64.const -1)) (i64.const -1))
94+
95+ (call $i64.print_equal
96+ (i64.extend8_s (i64.const 0 ))
97+ (i64.const 0 )
98+ )
99+
100+ (call $i64.print_equal
101+ (i64.extend8_s (i64.const 0x7f ))
102+ (i64.const 127 )
103+ )
104+
105+ (call $i64.print_equal
106+ (i64.extend8_s (i64.const 0x80 ))
107+ (i64.const -128 )
108+ )
109+
110+ (call $i64.print_equal
111+ (i64.extend8_s (i64.const 0xff ))
112+ (i64.const -1 )
113+ )
114+
115+ (call $i64.print_equal
116+ (i64.extend8_s (i64.const 0x0123456789abcd00 ))
117+ (i64.const 0 )
118+ )
119+
120+ (call $i64.print_equal
121+ (i64.extend8_s (i64.const 0xfedcba9876543280 ))
122+ (i64.const -0x80 )
123+ )
124+
125+ (call $i64.print_equal
126+ (i64.extend8_s (i64.const -1 ))
127+ (i64.const -1 )
128+ )
129+
130+ (call $i64.print_equal
131+ (i64.extend16_s (i64.const 0 ))
132+ (i64.const 0 )
133+ )
134+
135+ (call $i64.print_equal
136+ (i64.extend16_s (i64.const 0x7fff ))
137+ (i64.const 32767 )
138+ )
139+
140+ (call $i64.print_equal
141+ (i64.extend16_s (i64.const 0x8000 ))
142+ (i64.const -32768 )
143+ )
144+
145+ (call $i64.print_equal
146+ (i64.extend16_s (i64.const 0xffff ))
147+ (i64.const -1 )
148+ )
149+
150+ (call $i64.print_equal
151+ (i64.extend16_s (i64.const 0x123456789abc0000 ))
152+ (i64.const 0 )
153+ )
154+
155+ (call $i64.print_equal
156+ (i64.extend16_s (i64.const 0xfedcba9876548000 ))
157+ (i64.const -0x8000 )
158+ )
159+
160+ (call $i64.print_equal
161+ (i64.extend16_s (i64.const -1 ))
162+ (i64.const -1 )
163+ )
164+
165+ (call $i64.print_equal
166+ (i64.extend32_s (i64.const 0 ))
167+ (i64.const 0 )
168+ )
169+
170+ (call $i64.print_equal
171+ (i64.extend32_s (i64.const 0x7fff ))
172+ (i64.const 32767 )
173+ )
174+
175+ (call $i64.print_equal
176+ (i64.extend32_s (i64.const 0x8000 ))
177+ (i64.const 32768 )
178+ )
179+
180+ (call $i64.print_equal
181+ (i64.extend32_s (i64.const 0xffff ))
182+ (i64.const 65535 )
183+ )
184+
185+ (call $i64.print_equal
186+ (i64.extend32_s (i64.const 0x7fffffff ))
187+ (i64.const 0x7fffffff )
188+ )
189+
190+ (call $i64.print_equal
191+ (i64.extend32_s (i64.const 0x80000000 ))
192+ (i64.const -0x80000000 )
193+ )
194+
195+ (call $i64.print_equal
196+ (i64.extend32_s (i64.const 0xffffffff ))
197+ (i64.const -1 )
198+ )
199+
200+ (call $i64.print_equal
201+ (i64.extend32_s (i64.const 0x0123456700000000 ))
202+ (i64.const 0 )
203+ )
204+
205+ (call $i64.print_equal
206+ (i64.extend32_s (i64.const 0xfedcba9880000000 ))
207+ (i64.const -0x80000000 )
208+ )
209+
210+ (call $i64.print_equal
211+ (i64.extend32_s (i64.const -1 ))
212+ (i64.const -1 )
213+ )
214+ )
215+
216+ )
0 commit comments