...
1;; Tests for i64x2 arithmetic operations on major boundary values and all special values.
2
3
4(module
5 (func (export "i64x2.add") (param v128 v128) (result v128) (i64x2.add (local.get 0) (local.get 1)))
6 (func (export "i64x2.sub") (param v128 v128) (result v128) (i64x2.sub (local.get 0) (local.get 1)))
7 (func (export "i64x2.mul") (param v128 v128) (result v128) (i64x2.mul (local.get 0) (local.get 1)))
8 (func (export "i64x2.neg") (param v128) (result v128) (i64x2.neg (local.get 0)))
9)
10
11
12;; i64x2.add
13(assert_return (invoke "i64x2.add" (v128.const i64x2 0 0)
14 (v128.const i64x2 0 0))
15 (v128.const i64x2 0 0))
16(assert_return (invoke "i64x2.add" (v128.const i64x2 0 0)
17 (v128.const i64x2 1 1))
18 (v128.const i64x2 1 1))
19(assert_return (invoke "i64x2.add" (v128.const i64x2 1 1)
20 (v128.const i64x2 1 1))
21 (v128.const i64x2 2 2))
22(assert_return (invoke "i64x2.add" (v128.const i64x2 0 0)
23 (v128.const i64x2 -1 -1))
24 (v128.const i64x2 -1 -1))
25(assert_return (invoke "i64x2.add" (v128.const i64x2 1 1)
26 (v128.const i64x2 -1 -1))
27 (v128.const i64x2 0 0))
28(assert_return (invoke "i64x2.add" (v128.const i64x2 -1 -1)
29 (v128.const i64x2 -1 -1))
30 (v128.const i64x2 -2 -2))
31(assert_return (invoke "i64x2.add" (v128.const i64x2 4611686018427387903 4611686018427387903)
32 (v128.const i64x2 4611686018427387904 4611686018427387904))
33 (v128.const i64x2 9223372036854775807 9223372036854775807))
34(assert_return (invoke "i64x2.add" (v128.const i64x2 4611686018427387904 4611686018427387904)
35 (v128.const i64x2 4611686018427387904 4611686018427387904))
36 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
37(assert_return (invoke "i64x2.add" (v128.const i64x2 -4611686018427387903 -4611686018427387903)
38 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
39 (v128.const i64x2 -9223372036854775807 -9223372036854775807))
40(assert_return (invoke "i64x2.add" (v128.const i64x2 -4611686018427387904 -4611686018427387904)
41 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
42 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
43(assert_return (invoke "i64x2.add" (v128.const i64x2 -4611686018427387905 -4611686018427387905)
44 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
45 (v128.const i64x2 9223372036854775807 9223372036854775807))
46(assert_return (invoke "i64x2.add" (v128.const i64x2 9223372036854775805 9223372036854775805)
47 (v128.const i64x2 1 1))
48 (v128.const i64x2 9223372036854775806 9223372036854775806))
49(assert_return (invoke "i64x2.add" (v128.const i64x2 9223372036854775806 9223372036854775806)
50 (v128.const i64x2 1 1))
51 (v128.const i64x2 9223372036854775807 9223372036854775807))
52(assert_return (invoke "i64x2.add" (v128.const i64x2 9223372036854775808 9223372036854775808)
53 (v128.const i64x2 1 1))
54 (v128.const i64x2 -9223372036854775807 -9223372036854775807))
55(assert_return (invoke "i64x2.add" (v128.const i64x2 -9223372036854775806 -9223372036854775806)
56 (v128.const i64x2 -1 -1))
57 (v128.const i64x2 -9223372036854775807 -9223372036854775807))
58(assert_return (invoke "i64x2.add" (v128.const i64x2 -9223372036854775807 -9223372036854775807)
59 (v128.const i64x2 -1 -1))
60 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
61(assert_return (invoke "i64x2.add" (v128.const i64x2 -9223372036854775808 -9223372036854775808)
62 (v128.const i64x2 -1 -1))
63 (v128.const i64x2 9223372036854775807 9223372036854775807))
64(assert_return (invoke "i64x2.add" (v128.const i64x2 9223372036854775807 9223372036854775807)
65 (v128.const i64x2 9223372036854775807 9223372036854775807))
66 (v128.const i64x2 -2 -2))
67(assert_return (invoke "i64x2.add" (v128.const i64x2 -9223372036854775808 -9223372036854775808)
68 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
69 (v128.const i64x2 0 0))
70(assert_return (invoke "i64x2.add" (v128.const i64x2 -9223372036854775808 -9223372036854775808)
71 (v128.const i64x2 -9223372036854775807 -9223372036854775807))
72 (v128.const i64x2 1 1))
73(assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615)
74 (v128.const i64x2 0 0))
75 (v128.const i64x2 -1 -1))
76(assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615)
77 (v128.const i64x2 1 1))
78 (v128.const i64x2 0 0))
79(assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615)
80 (v128.const i64x2 -1 -1))
81 (v128.const i64x2 -2 -2))
82(assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615)
83 (v128.const i64x2 9223372036854775807 9223372036854775807))
84 (v128.const i64x2 9223372036854775806 9223372036854775806))
85(assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615)
86 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
87 (v128.const i64x2 9223372036854775807 9223372036854775807))
88(assert_return (invoke "i64x2.add" (v128.const i64x2 18446744073709551615 18446744073709551615)
89 (v128.const i64x2 18446744073709551615 18446744073709551615))
90 (v128.const i64x2 -2 -2))
91(assert_return (invoke "i64x2.add" (v128.const i64x2 0x3fffffffffffffff 0x3fffffffffffffff)
92 (v128.const i64x2 0x4000000000000000 0x4000000000000000))
93 (v128.const i64x2 9223372036854775807 9223372036854775807))
94(assert_return (invoke "i64x2.add" (v128.const i64x2 0x4000000000000000 0x4000000000000000)
95 (v128.const i64x2 0x4000000000000000 0x4000000000000000))
96 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
97(assert_return (invoke "i64x2.add" (v128.const i64x2 -0x3fffffffffffffff -0x3fffffffffffffff)
98 (v128.const i64x2 -0x40000000fffffff -0x40000000fffffff))
99 (v128.const i64x2 -4899916394847535102 -4899916394847535102))
100(assert_return (invoke "i64x2.add" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000)
101 (v128.const i64x2 -0x400000000000000 -0x400000000000000))
102 (v128.const i64x2 -4899916394579099648 -4899916394579099648))
103(assert_return (invoke "i64x2.add" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000)
104 (v128.const i64x2 -0x400000000000001 -0x400000000000001))
105 (v128.const i64x2 -4899916394579099649 -4899916394579099649))
106(assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
107 (v128.const i64x2 0x7ffffffffffffff 0x7ffffffffffffff))
108 (v128.const i64x2 -8646911284551352322 -8646911284551352322))
109(assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
110 (v128.const i64x2 0x01 0x01))
111 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
112(assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
113 (v128.const i64x2 -0x01 -0x01))
114 (v128.const i64x2 9223372036854775807 9223372036854775807))
115(assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
116 (v128.const i64x2 0x8000000000000000 0x8000000000000000))
117 (v128.const i64x2 -1 -1))
118(assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
119 (v128.const i64x2 0x8000000000000000 0x8000000000000000))
120 (v128.const i64x2 0 0))
121(assert_return (invoke "i64x2.add" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)
122 (v128.const i64x2 0x01 0x01))
123 (v128.const i64x2 0 0))
124(assert_return (invoke "i64x2.add" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)
125 (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff))
126 (v128.const i64x2 -2 -2))
127(assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
128 (v128.const i8x16 0 0 0 0 0 0 0 0x80 0 0 0 0 0 0 0 0x80))
129 (v128.const i64x2 -1 -1))
130(assert_return (invoke "i64x2.add" (v128.const i64x2 1 1)
131 (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255))
132 (v128.const i64x2 0 0))
133(assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
134 (v128.const i16x8 0 0 0 0x8000 0 0 0 0x8000))
135 (v128.const i64x2 -1 -1))
136(assert_return (invoke "i64x2.add" (v128.const i64x2 1 1)
137 (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff))
138 (v128.const i64x2 0 0))
139(assert_return (invoke "i64x2.add" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
140 (v128.const i32x4 0 0x80000000 0 0x80000000))
141 (v128.const i64x2 -1 -1))
142(assert_return (invoke "i64x2.add" (v128.const i64x2 1 1)
143 (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
144 (v128.const i64x2 0 0))
145(assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
146 (v128.const f64x2 +0.0 +0.0))
147 (v128.const i64x2 0x8000000000000000 0x8000000000000000))
148(assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
149 (v128.const f64x2 -0.0 -0.0))
150 (v128.const i64x2 0 0))
151(assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
152 (v128.const f64x2 1.0 1.0))
153 (v128.const i64x2 0xbff0000000000000 0xbff0000000000000))
154(assert_return (invoke "i64x2.add" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
155 (v128.const f64x2 -1.0 -1.0))
156 (v128.const i64x2 0x3ff0000000000000 0x3ff0000000000000))
157(assert_return (invoke "i64x2.add" (v128.const i64x2 1 1)
158 (v128.const f64x2 +inf +inf))
159 (v128.const i64x2 0x7ff0000000000001 0x7ff0000000000001))
160(assert_return (invoke "i64x2.add" (v128.const i64x2 1 1)
161 (v128.const f64x2 -inf -inf))
162 (v128.const i64x2 0xfff0000000000001 0xfff0000000000001))
163(assert_return (invoke "i64x2.add" (v128.const i64x2 1 1)
164 (v128.const f64x2 nan nan))
165 (v128.const i64x2 0x7ff8000000000001 0x7ff8000000000001))
166(assert_return (invoke "i64x2.add" (v128.const i64x2 0 1)
167 (v128.const i64x2 0 0xffffffffffffffff))
168 (v128.const i64x2 0 0))
169(assert_return (invoke "i64x2.add" (v128.const i64x2 0 1)
170 (v128.const i64x2 0 2))
171 (v128.const i64x2 0 3))
172(assert_return (invoke "i64x2.add" (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789)
173 (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789))
174 (v128.const i64x2 02_469_135_780_246_913_578 02_469_135_780_246_913_578))
175(assert_return (invoke "i64x2.add" (v128.const i64x2 0x0_1234_5678_90AB_cdef 0x0_1234_5678_90AB_cdef)
176 (v128.const i64x2 0x0_90AB_cdef_1234_5678 0x0_90AB_cdef_1234_5678))
177 (v128.const i64x2 0x0_a2e0_2467_a2e0_2467 0x0_a2e0_2467_a2e0_2467))
178
179;; i64x2.sub
180(assert_return (invoke "i64x2.sub" (v128.const i64x2 0 0)
181 (v128.const i64x2 0 0))
182 (v128.const i64x2 0 0))
183(assert_return (invoke "i64x2.sub" (v128.const i64x2 0 0)
184 (v128.const i64x2 1 1))
185 (v128.const i64x2 -1 -1))
186(assert_return (invoke "i64x2.sub" (v128.const i64x2 1 1)
187 (v128.const i64x2 1 1))
188 (v128.const i64x2 0 0))
189(assert_return (invoke "i64x2.sub" (v128.const i64x2 0 0)
190 (v128.const i64x2 -1 -1))
191 (v128.const i64x2 1 1))
192(assert_return (invoke "i64x2.sub" (v128.const i64x2 1 1)
193 (v128.const i64x2 -1 -1))
194 (v128.const i64x2 2 2))
195(assert_return (invoke "i64x2.sub" (v128.const i64x2 -1 -1)
196 (v128.const i64x2 -1 -1))
197 (v128.const i64x2 0 0))
198(assert_return (invoke "i64x2.sub" (v128.const i64x2 4611686018427387903 4611686018427387903)
199 (v128.const i64x2 4611686018427387904 4611686018427387904))
200 (v128.const i64x2 -1 -1))
201(assert_return (invoke "i64x2.sub" (v128.const i64x2 4611686018427387904 4611686018427387904)
202 (v128.const i64x2 4611686018427387904 4611686018427387904))
203 (v128.const i64x2 0 0))
204(assert_return (invoke "i64x2.sub" (v128.const i64x2 -4611686018427387903 -4611686018427387903)
205 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
206 (v128.const i64x2 1 1))
207(assert_return (invoke "i64x2.sub" (v128.const i64x2 -4611686018427387904 -4611686018427387904)
208 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
209 (v128.const i64x2 0 0))
210(assert_return (invoke "i64x2.sub" (v128.const i64x2 -4611686018427387905 -4611686018427387905)
211 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
212 (v128.const i64x2 -1 -1))
213(assert_return (invoke "i64x2.sub" (v128.const i64x2 9223372036854775805 9223372036854775805)
214 (v128.const i64x2 1 1))
215 (v128.const i64x2 9223372036854775804 9223372036854775804))
216(assert_return (invoke "i64x2.sub" (v128.const i64x2 9223372036854775806 9223372036854775806)
217 (v128.const i64x2 1 1))
218 (v128.const i64x2 9223372036854775805 9223372036854775805))
219(assert_return (invoke "i64x2.sub" (v128.const i64x2 9223372036854775808 9223372036854775808)
220 (v128.const i64x2 1 1))
221 (v128.const i64x2 9223372036854775807 9223372036854775807))
222(assert_return (invoke "i64x2.sub" (v128.const i64x2 -9223372036854775806 -9223372036854775806)
223 (v128.const i64x2 -1 -1))
224 (v128.const i64x2 -9223372036854775805 -9223372036854775805))
225(assert_return (invoke "i64x2.sub" (v128.const i64x2 -9223372036854775807 -9223372036854775807)
226 (v128.const i64x2 -1 -1))
227 (v128.const i64x2 -9223372036854775806 -9223372036854775806))
228(assert_return (invoke "i64x2.sub" (v128.const i64x2 -9223372036854775808 -9223372036854775808)
229 (v128.const i64x2 -1 -1))
230 (v128.const i64x2 -9223372036854775807 -9223372036854775807))
231(assert_return (invoke "i64x2.sub" (v128.const i64x2 9223372036854775807 9223372036854775807)
232 (v128.const i64x2 9223372036854775807 9223372036854775807))
233 (v128.const i64x2 0 0))
234(assert_return (invoke "i64x2.sub" (v128.const i64x2 -9223372036854775808 -9223372036854775808)
235 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
236 (v128.const i64x2 0 0))
237(assert_return (invoke "i64x2.sub" (v128.const i64x2 -9223372036854775808 -9223372036854775808)
238 (v128.const i64x2 -9223372036854775807 -9223372036854775807))
239 (v128.const i64x2 -1 -1))
240(assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615)
241 (v128.const i64x2 0 0))
242 (v128.const i64x2 -1 -1))
243(assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615)
244 (v128.const i64x2 1 1))
245 (v128.const i64x2 -2 -2))
246(assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615)
247 (v128.const i64x2 -1 -1))
248 (v128.const i64x2 0 0))
249(assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615)
250 (v128.const i64x2 9223372036854775807 9223372036854775807))
251 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
252(assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615)
253 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
254 (v128.const i64x2 9223372036854775807 9223372036854775807))
255(assert_return (invoke "i64x2.sub" (v128.const i64x2 18446744073709551615 18446744073709551615)
256 (v128.const i64x2 18446744073709551615 18446744073709551615))
257 (v128.const i64x2 0 0))
258(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x3fffffffffffffff 0x3fffffffffffffff)
259 (v128.const i64x2 0x4000000000000000 0x4000000000000000))
260 (v128.const i64x2 -1 -1))
261(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x4000000000000000 0x4000000000000000)
262 (v128.const i64x2 0x4000000000000000 0x4000000000000000))
263 (v128.const i64x2 0 0))
264(assert_return (invoke "i64x2.sub" (v128.const i64x2 -0x3fffffffffffffff -0x3fffffffffffffff)
265 (v128.const i64x2 -0x40000000fffffff -0x40000000fffffff))
266 (v128.const i64x2 -4323455642007240704 -4323455642007240704))
267(assert_return (invoke "i64x2.sub" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000)
268 (v128.const i64x2 -0x400000000000000 -0x400000000000000))
269 (v128.const i64x2 -4323455642275676160 -4323455642275676160))
270(assert_return (invoke "i64x2.sub" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000)
271 (v128.const i64x2 -0x400000000000001 -0x400000000000001))
272 (v128.const i64x2 -4323455642275676159 -4323455642275676159))
273(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
274 (v128.const i64x2 0x7ffffffffffffff 0x7ffffffffffffff))
275 (v128.const i64x2 8646911284551352320 8646911284551352320))
276(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
277 (v128.const i64x2 0x01 0x01))
278 (v128.const i64x2 9223372036854775806 9223372036854775806))
279(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
280 (v128.const i64x2 -0x01 -0x01))
281 (v128.const i64x2 -9223372036854775807 -9223372036854775807))
282(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
283 (v128.const i64x2 0x8000000000000000 0x8000000000000000))
284 (v128.const i64x2 -1 -1))
285(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
286 (v128.const i64x2 0x8000000000000000 0x8000000000000000))
287 (v128.const i64x2 0 0))
288(assert_return (invoke "i64x2.sub" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)
289 (v128.const i64x2 0x01 0x01))
290 (v128.const i64x2 -2 -2))
291(assert_return (invoke "i64x2.sub" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)
292 (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff))
293 (v128.const i64x2 0 0))
294(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
295 (v128.const i8x16 0 0 0 0 0 0 0 0x80 0 0 0 0 0 0 0 0x80))
296 (v128.const i64x2 -1 -1))
297(assert_return (invoke "i64x2.sub" (v128.const i64x2 1 1)
298 (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255))
299 (v128.const i64x2 2 2))
300(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
301 (v128.const i16x8 0 0 0 0x8000 0 0 0 0x8000))
302 (v128.const i64x2 -1 -1))
303(assert_return (invoke "i64x2.sub" (v128.const i64x2 1 1)
304 (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff))
305 (v128.const i64x2 2 2))
306(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
307 (v128.const i32x4 0 0x80000000 0 0x80000000))
308 (v128.const i64x2 -1 -1))
309(assert_return (invoke "i64x2.sub" (v128.const i64x2 1 1)
310 (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
311 (v128.const i64x2 2 2))
312(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
313 (v128.const f64x2 +0.0 +0.0))
314 (v128.const i64x2 0x8000000000000000 0x8000000000000000))
315(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
316 (v128.const f64x2 -0.0 -0.0))
317 (v128.const i64x2 0 0))
318(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
319 (v128.const f64x2 1.0 1.0))
320 (v128.const i64x2 0x4010000000000000 0x4010000000000000))
321(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
322 (v128.const f64x2 -1.0 -1.0))
323 (v128.const i64x2 0xc010000000000000 0xc010000000000000))
324(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x1 0x1)
325 (v128.const f64x2 +inf +inf))
326 (v128.const i64x2 0x8010000000000001 0x8010000000000001))
327(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x1 0x1)
328 (v128.const f64x2 -inf -inf))
329 (v128.const i64x2 0x0010000000000001 0x0010000000000001))
330(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x1 0x1)
331 (v128.const f64x2 nan nan))
332 (v128.const i64x2 0x8008000000000001 0x8008000000000001))
333(assert_return (invoke "i64x2.sub" (v128.const i64x2 0 1)
334 (v128.const i64x2 0 0xffffffffffffffff))
335 (v128.const i64x2 0 0x02))
336(assert_return (invoke "i64x2.sub" (v128.const i64x2 0 1)
337 (v128.const i64x2 0 2))
338 (v128.const i64x2 0 -1))
339(assert_return (invoke "i64x2.sub" (v128.const i64x2 03_214_567_890_123_456_789 03_214_567_890_123_456_789)
340 (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789))
341 (v128.const i64x2 01_980_000_000_000_000_000 01_980_000_000_000_000_000))
342(assert_return (invoke "i64x2.sub" (v128.const i64x2 0x0_90AB_cdef_8765_4321 0x0_90AB_cdef_8765_4321)
343 (v128.const i64x2 0x0_1234_5678_90AB_cdef 0x0_1234_5678_90AB_cdef))
344 (v128.const i64x2 0x0_7e77_7776_f6b9_7532 0x0_7e77_7776_f6b9_7532))
345
346;; i64x2.mul
347(assert_return (invoke "i64x2.mul" (v128.const i64x2 0 0)
348 (v128.const i64x2 0 0))
349 (v128.const i64x2 0 0))
350(assert_return (invoke "i64x2.mul" (v128.const i64x2 0 0)
351 (v128.const i64x2 1 1))
352 (v128.const i64x2 0 0))
353(assert_return (invoke "i64x2.mul" (v128.const i64x2 1 1)
354 (v128.const i64x2 1 1))
355 (v128.const i64x2 1 1))
356(assert_return (invoke "i64x2.mul" (v128.const i64x2 0 0)
357 (v128.const i64x2 -1 -1))
358 (v128.const i64x2 0 0))
359(assert_return (invoke "i64x2.mul" (v128.const i64x2 1 1)
360 (v128.const i64x2 -1 -1))
361 (v128.const i64x2 -1 -1))
362(assert_return (invoke "i64x2.mul" (v128.const i64x2 -1 -1)
363 (v128.const i64x2 -1 -1))
364 (v128.const i64x2 1 1))
365(assert_return (invoke "i64x2.mul" (v128.const i64x2 4611686018427387903 4611686018427387903)
366 (v128.const i64x2 4611686018427387904 4611686018427387904))
367 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
368(assert_return (invoke "i64x2.mul" (v128.const i64x2 4611686018427387904 4611686018427387904)
369 (v128.const i64x2 4611686018427387904 4611686018427387904))
370 (v128.const i64x2 0 0))
371(assert_return (invoke "i64x2.mul" (v128.const i64x2 -4611686018427387903 -4611686018427387903)
372 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
373 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
374(assert_return (invoke "i64x2.mul" (v128.const i64x2 -4611686018427387904 -4611686018427387904)
375 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
376 (v128.const i64x2 0 0))
377(assert_return (invoke "i64x2.mul" (v128.const i64x2 -4611686018427387905 -4611686018427387905)
378 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
379 (v128.const i64x2 4611686018427387904 4611686018427387904))
380(assert_return (invoke "i64x2.mul" (v128.const i64x2 9223372036854775805 9223372036854775805)
381 (v128.const i64x2 1 1))
382 (v128.const i64x2 9223372036854775805 9223372036854775805))
383(assert_return (invoke "i64x2.mul" (v128.const i64x2 9223372036854775806 9223372036854775806)
384 (v128.const i64x2 1 1))
385 (v128.const i64x2 9223372036854775806 9223372036854775806))
386(assert_return (invoke "i64x2.mul" (v128.const i64x2 9223372036854775808 9223372036854775808)
387 (v128.const i64x2 1 1))
388 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
389(assert_return (invoke "i64x2.mul" (v128.const i64x2 -9223372036854775806 -9223372036854775806)
390 (v128.const i64x2 -1 -1))
391 (v128.const i64x2 9223372036854775806 9223372036854775806))
392(assert_return (invoke "i64x2.mul" (v128.const i64x2 -9223372036854775807 -9223372036854775807)
393 (v128.const i64x2 -1 -1))
394 (v128.const i64x2 9223372036854775807 9223372036854775807))
395(assert_return (invoke "i64x2.mul" (v128.const i64x2 -9223372036854775808 -9223372036854775808)
396 (v128.const i64x2 -1 -1))
397 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
398(assert_return (invoke "i64x2.mul" (v128.const i64x2 9223372036854775807 9223372036854775807)
399 (v128.const i64x2 9223372036854775807 9223372036854775807))
400 (v128.const i64x2 1 1))
401(assert_return (invoke "i64x2.mul" (v128.const i64x2 -9223372036854775808 -9223372036854775808)
402 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
403 (v128.const i64x2 0 0))
404(assert_return (invoke "i64x2.mul" (v128.const i64x2 -9223372036854775808 -9223372036854775808)
405 (v128.const i64x2 -9223372036854775807 -9223372036854775807))
406 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
407(assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615)
408 (v128.const i64x2 0 0))
409 (v128.const i64x2 0 0))
410(assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615)
411 (v128.const i64x2 1 1))
412 (v128.const i64x2 -1 -1))
413(assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615)
414 (v128.const i64x2 -1 -1))
415 (v128.const i64x2 1 1))
416(assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615)
417 (v128.const i64x2 9223372036854775807 9223372036854775807))
418 (v128.const i64x2 -9223372036854775807 -9223372036854775807))
419(assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615)
420 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
421 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
422(assert_return (invoke "i64x2.mul" (v128.const i64x2 18446744073709551615 18446744073709551615)
423 (v128.const i64x2 18446744073709551615 18446744073709551615))
424 (v128.const i64x2 1 1))
425(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x3fffffffffffffff 0x3fffffffffffffff)
426 (v128.const i64x2 0x4000000000000000 0x4000000000000000))
427 (v128.const i64x2 -4611686018427387904 -4611686018427387904))
428(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x4000000000000000 0x4000000000000000)
429 (v128.const i64x2 0x4000000000000000 0x4000000000000000))
430 (v128.const i64x2 0 0))
431(assert_return (invoke "i64x2.mul" (v128.const i64x2 -0x3fffffffffffffff -0x3fffffffffffffff)
432 (v128.const i64x2 -0x40000000fffffff -0x40000000fffffff))
433 (v128.const i64x2 -4899916394847535103 -4899916394847535103))
434(assert_return (invoke "i64x2.mul" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000)
435 (v128.const i64x2 -0x400000000000000 -0x400000000000000))
436 (v128.const i64x2 0 0))
437(assert_return (invoke "i64x2.mul" (v128.const i64x2 -0x4000000000000000 -0x4000000000000000)
438 (v128.const i64x2 -0x400000000000001 -0x400000000000001))
439 (v128.const i64x2 4611686018427387904 4611686018427387904))
440(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
441 (v128.const i64x2 0x7ffffffffffffff 0x7ffffffffffffff))
442 (v128.const i64x2 8646911284551352321 8646911284551352321))
443(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
444 (v128.const i64x2 0x01 0x01))
445 (v128.const i64x2 9223372036854775807 9223372036854775807))
446(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
447 (v128.const i64x2 -0x01 -0x01))
448 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
449(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff)
450 (v128.const i64x2 0x8000000000000000 0x8000000000000000))
451 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
452(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
453 (v128.const i64x2 0x8000000000000000 0x8000000000000000))
454 (v128.const i64x2 0 0))
455(assert_return (invoke "i64x2.mul" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)
456 (v128.const i64x2 0x01 0x01))
457 (v128.const i64x2 -1 -1))
458(assert_return (invoke "i64x2.mul" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)
459 (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff))
460 (v128.const i64x2 1 1))
461(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
462 (v128.const i8x16 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2 0x2))
463 (v128.const i64x2 0 0))
464(assert_return (invoke "i64x2.mul" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)
465 (v128.const i8x16 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255))
466 (v128.const i64x2 1 1))
467(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
468 (v128.const i16x8 0 0 0 0x02 0 0 0 0x02))
469 (v128.const i64x2 0 0))
470(assert_return (invoke "i64x2.mul" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)
471 (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff))
472 (v128.const i64x2 1 1))
473(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x8000000000000000 0x8000000000000000)
474 (v128.const i32x4 0 0x02 0 0x02))
475 (v128.const i64x2 0 0))
476(assert_return (invoke "i64x2.mul" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff)
477 (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
478 (v128.const i64x2 1 1))
479(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x80000000 0x80000000)
480 (v128.const f64x2 +0.0 +0.0))
481 (v128.const i64x2 0 0))
482(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x80000000 0x80000000)
483 (v128.const f64x2 -0.0 -0.0))
484 (v128.const i64x2 0 0))
485(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x80000000 0x80000000)
486 (v128.const f64x2 1.0 1.0))
487 (v128.const i64x2 0 0))
488(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x80000000 0x80000000)
489 (v128.const f64x2 -1.0 -1.0))
490 (v128.const i64x2 0 0))
491(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x1 0x1)
492 (v128.const f64x2 +inf +inf))
493 (v128.const i64x2 0x7ff0000000000000 0x7ff0000000000000))
494(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x1 0x1)
495 (v128.const f64x2 -inf -inf))
496 (v128.const i64x2 0xfff0000000000000 0xfff0000000000000))
497(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x1 0x1)
498 (v128.const f64x2 nan nan))
499 (v128.const i64x2 0x7ff8000000000000 0x7ff8000000000000))
500(assert_return (invoke "i64x2.mul" (v128.const i64x2 0 1)
501 (v128.const i64x2 0 0xffffffffffffffff))
502 (v128.const i64x2 0 0xffffffffffffffff))
503(assert_return (invoke "i64x2.mul" (v128.const i64x2 0 1)
504 (v128.const i64x2 0 2))
505 (v128.const i64x2 0 0x02))
506(assert_return (invoke "i64x2.mul" (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789)
507 (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789))
508 (v128.const i64x2 09_710_478_858_155_731_897 09_710_478_858_155_731_897))
509(assert_return (invoke "i64x2.mul" (v128.const i64x2 0x0_1234_5678_90AB_cdef 0x0_1234_5678_90AB_cdef)
510 (v128.const i64x2 0x0_90AB_cdef_8765_4321 0x0_90AB_cdef_8765_4321))
511 (v128.const i64x2 0x0_602f_05e9_e556_18cf 0x0_602f_05e9_e556_18cf))
512
513;; i64x2.neg
514(assert_return (invoke "i64x2.neg" (v128.const i64x2 0 0))
515 (v128.const i64x2 0 0))
516(assert_return (invoke "i64x2.neg" (v128.const i64x2 1 1))
517 (v128.const i64x2 -1 -1))
518(assert_return (invoke "i64x2.neg" (v128.const i64x2 -1 -1))
519 (v128.const i64x2 1 1))
520(assert_return (invoke "i64x2.neg" (v128.const i64x2 9223372036854775806 9223372036854775806))
521 (v128.const i64x2 -9223372036854775806 -9223372036854775806))
522(assert_return (invoke "i64x2.neg" (v128.const i64x2 -9223372036854775807 -9223372036854775807))
523 (v128.const i64x2 9223372036854775807 9223372036854775807))
524(assert_return (invoke "i64x2.neg" (v128.const i64x2 -9223372036854775808 -9223372036854775808))
525 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
526(assert_return (invoke "i64x2.neg" (v128.const i64x2 9223372036854775807 9223372036854775807))
527 (v128.const i64x2 -9223372036854775807 -9223372036854775807))
528(assert_return (invoke "i64x2.neg" (v128.const i64x2 18446744073709551615 18446744073709551615))
529 (v128.const i64x2 1 1))
530(assert_return (invoke "i64x2.neg" (v128.const i64x2 0x01 0x01))
531 (v128.const i64x2 -1 -1))
532(assert_return (invoke "i64x2.neg" (v128.const i64x2 -0x01 -0x01))
533 (v128.const i64x2 1 1))
534(assert_return (invoke "i64x2.neg" (v128.const i64x2 -0x8000000000000000 -0x8000000000000000))
535 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
536(assert_return (invoke "i64x2.neg" (v128.const i64x2 -0x7fffffffffffffff -0x7fffffffffffffff))
537 (v128.const i64x2 9223372036854775807 9223372036854775807))
538(assert_return (invoke "i64x2.neg" (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff))
539 (v128.const i64x2 -9223372036854775807 -9223372036854775807))
540(assert_return (invoke "i64x2.neg" (v128.const i64x2 0x8000000000000000 0x8000000000000000))
541 (v128.const i64x2 -9223372036854775808 -9223372036854775808))
542(assert_return (invoke "i64x2.neg" (v128.const i64x2 0xffffffffffffffff 0xffffffffffffffff))
543 (v128.const i64x2 1 1))
544
545;; type check
546(assert_invalid (module (func (result v128) (i64x2.neg (i32.const 0)))) "type mismatch")
547(assert_invalid (module (func (result v128) (i64x2.add (i32.const 0) (f32.const 0.0)))) "type mismatch")
548(assert_invalid (module (func (result v128) (i64x2.sub (i32.const 0) (f32.const 0.0)))) "type mismatch")
549(assert_invalid (module (func (result v128) (i64x2.mul (i32.const 0) (f32.const 0.0)))) "type mismatch")
550
551;; Test operation with empty argument
552
553(assert_invalid
554 (module
555 (func $i64x2.neg-arg-empty (result v128)
556 (i64x2.neg)
557 )
558 )
559 "type mismatch"
560)
561(assert_invalid
562 (module
563 (func $i64x2.add-1st-arg-empty (result v128)
564 (i64x2.add (v128.const i64x2 0 0))
565 )
566 )
567 "type mismatch"
568)
569(assert_invalid
570 (module
571 (func $i64x2.add-arg-empty (result v128)
572 (i64x2.add)
573 )
574 )
575 "type mismatch"
576)
577(assert_invalid
578 (module
579 (func $i64x2.sub-1st-arg-empty (result v128)
580 (i64x2.sub (v128.const i64x2 0 0))
581 )
582 )
583 "type mismatch"
584)
585(assert_invalid
586 (module
587 (func $i64x2.sub-arg-empty (result v128)
588 (i64x2.sub)
589 )
590 )
591 "type mismatch"
592)
593(assert_invalid
594 (module
595 (func $i64x2.mul-1st-arg-empty (result v128)
596 (i64x2.mul (v128.const i64x2 0 0))
597 )
598 )
599 "type mismatch"
600)
601(assert_invalid
602 (module
603 (func $i64x2.mul-arg-empty (result v128)
604 (i64x2.mul)
605 )
606 )
607 "type mismatch"
608)
609
610;; combination
611(module
612 (func (export "add-sub") (param v128 v128 v128) (result v128)
613 (i64x2.add (i64x2.sub (local.get 0) (local.get 1))(local.get 2)))
614 (func (export "mul-add") (param v128 v128 v128) (result v128)
615 (i64x2.mul (i64x2.add (local.get 0) (local.get 1))(local.get 2)))
616 (func (export "mul-sub") (param v128 v128 v128) (result v128)
617 (i64x2.mul (i64x2.sub (local.get 0) (local.get 1))(local.get 2)))
618 (func (export "sub-add") (param v128 v128 v128) (result v128)
619 (i64x2.sub (i64x2.add (local.get 0) (local.get 1))(local.get 2)))
620 (func (export "add-neg") (param v128 v128) (result v128)
621 (i64x2.add (i64x2.neg (local.get 0)) (local.get 1)))
622 (func (export "mul-neg") (param v128 v128) (result v128)
623 (i64x2.mul (i64x2.neg (local.get 0)) (local.get 1)))
624 (func (export "sub-neg") (param v128 v128) (result v128)
625 (i64x2.sub (i64x2.neg (local.get 0)) (local.get 1)))
626)
627
628(assert_return (invoke "add-sub" (v128.const i64x2 0 1)
629 (v128.const i64x2 0 2)
630 (v128.const i64x2 0 2))
631 (v128.const i64x2 0 1))
632(assert_return (invoke "mul-add" (v128.const i64x2 0 1)
633 (v128.const i64x2 0 1)
634 (v128.const i64x2 2 2))
635 (v128.const i64x2 0 4))
636(assert_return (invoke "mul-sub" (v128.const i64x2 0 2)
637 (v128.const i64x2 0 1)
638 (v128.const i64x2 0 1))
639 (v128.const i64x2 0 1))
640(assert_return (invoke "sub-add" (v128.const i64x2 0 1)
641 (v128.const i64x2 0 2)
642 (v128.const i64x2 0 2))
643 (v128.const i64x2 0 1))
644(assert_return (invoke "add-neg" (v128.const i64x2 0 1)
645 (v128.const i64x2 0 1))
646 (v128.const i64x2 0 0))
647(assert_return (invoke "mul-neg" (v128.const i64x2 0 1)
648 (v128.const i64x2 2 2))
649 (v128.const i64x2 0 -2))
650(assert_return (invoke "sub-neg" (v128.const i64x2 0 1)
651 (v128.const i64x2 0 1))
652 (v128.const i64x2 0 -2))
View as plain text