8e52030ecdabfba5392e5e2acff28f255ad5776e
[platform/framework/web/lwnode.git] /
1 ;; Load i32 data with different offset/align arguments
2
3 (module
4   (memory 1)
5   (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz")
6
7   (func (export "8u_good1") (param $i i32) (result i32)
8     (i32.load8_u offset=0 (local.get $i))                   ;; 97 'a'
9   )
10   (func (export "8u_good2") (param $i i32) (result i32)
11     (i32.load8_u align=1 (local.get $i))                    ;; 97 'a'
12   )
13   (func (export "8u_good3") (param $i i32) (result i32)
14     (i32.load8_u offset=1 align=1 (local.get $i))           ;; 98 'b'
15   )
16   (func (export "8u_good4") (param $i i32) (result i32)
17     (i32.load8_u offset=2 align=1 (local.get $i))           ;; 99 'c'
18   )
19   (func (export "8u_good5") (param $i i32) (result i32)
20     (i32.load8_u offset=25 align=1 (local.get $i))          ;; 122 'z'
21   )
22
23   (func (export "8s_good1") (param $i i32) (result i32)
24     (i32.load8_s offset=0 (local.get $i))                   ;; 97 'a'
25   )
26   (func (export "8s_good2") (param $i i32) (result i32)
27     (i32.load8_s align=1 (local.get $i))                    ;; 97 'a'
28   )
29   (func (export "8s_good3") (param $i i32) (result i32)
30     (i32.load8_s offset=1 align=1 (local.get $i))           ;; 98 'b'
31   )
32   (func (export "8s_good4") (param $i i32) (result i32)
33     (i32.load8_s offset=2 align=1 (local.get $i))           ;; 99 'c'
34   )
35   (func (export "8s_good5") (param $i i32) (result i32)
36     (i32.load8_s offset=25 align=1 (local.get $i))          ;; 122 'z'
37   )
38
39   (func (export "16u_good1") (param $i i32) (result i32)
40     (i32.load16_u offset=0 (local.get $i))                  ;; 25185 'ab'
41   )
42   (func (export "16u_good2") (param $i i32) (result i32)
43     (i32.load16_u align=1 (local.get $i))                   ;; 25185 'ab'
44   )
45   (func (export "16u_good3") (param $i i32) (result i32)
46     (i32.load16_u offset=1 align=1 (local.get $i))          ;; 25442 'bc'
47   )
48   (func (export "16u_good4") (param $i i32) (result i32)
49     (i32.load16_u offset=2 align=2 (local.get $i))          ;; 25699 'cd'
50   )
51   (func (export "16u_good5") (param $i i32) (result i32)
52     (i32.load16_u offset=25 align=2 (local.get $i))         ;; 122 'z\0'
53   )
54
55   (func (export "16s_good1") (param $i i32) (result i32)
56     (i32.load16_s offset=0 (local.get $i))                  ;; 25185 'ab'
57   )
58   (func (export "16s_good2") (param $i i32) (result i32)
59     (i32.load16_s align=1 (local.get $i))                   ;; 25185 'ab'
60   )
61   (func (export "16s_good3") (param $i i32) (result i32)
62     (i32.load16_s offset=1 align=1 (local.get $i))          ;; 25442 'bc'
63   )
64   (func (export "16s_good4") (param $i i32) (result i32)
65     (i32.load16_s offset=2 align=2 (local.get $i))          ;; 25699 'cd'
66   )
67   (func (export "16s_good5") (param $i i32) (result i32)
68     (i32.load16_s offset=25 align=2 (local.get $i))         ;; 122 'z\0'
69   )
70
71   (func (export "32_good1") (param $i i32) (result i32)
72     (i32.load offset=0 (local.get $i))                      ;; 1684234849 'abcd'
73   )
74   (func (export "32_good2") (param $i i32) (result i32)
75     (i32.load align=1 (local.get $i))                       ;; 1684234849 'abcd'
76   )
77   (func (export "32_good3") (param $i i32) (result i32)
78     (i32.load offset=1 align=1 (local.get $i))              ;; 1701077858 'bcde'
79   )
80   (func (export "32_good4") (param $i i32) (result i32)
81     (i32.load offset=2 align=2 (local.get $i))              ;; 1717920867 'cdef'
82   )
83   (func (export "32_good5") (param $i i32) (result i32)
84     (i32.load offset=25 align=4 (local.get $i))             ;; 122 'z\0\0\0'
85   )
86
87   (func (export "8u_bad") (param $i i32)
88     (drop (i32.load8_u offset=4294967295 (local.get $i)))
89   )
90   (func (export "8s_bad") (param $i i32)
91     (drop (i32.load8_s offset=4294967295 (local.get $i)))
92   )
93   (func (export "16u_bad") (param $i i32)
94     (drop (i32.load16_u offset=4294967295 (local.get $i)))
95   )
96   (func (export "16s_bad") (param $i i32)
97     (drop (i32.load16_s offset=4294967295 (local.get $i)))
98   )
99   (func (export "32_bad") (param $i i32)
100     (drop (i32.load offset=4294967295 (local.get $i)))
101   )
102 )
103
104 (assert_return (invoke "8u_good1" (i32.const 0)) (i32.const 97))
105 (assert_return (invoke "8u_good2" (i32.const 0)) (i32.const 97))
106 (assert_return (invoke "8u_good3" (i32.const 0)) (i32.const 98))
107 (assert_return (invoke "8u_good4" (i32.const 0)) (i32.const 99))
108 (assert_return (invoke "8u_good5" (i32.const 0)) (i32.const 122))
109
110 (assert_return (invoke "8s_good1" (i32.const 0)) (i32.const 97))
111 (assert_return (invoke "8s_good2" (i32.const 0)) (i32.const 97))
112 (assert_return (invoke "8s_good3" (i32.const 0)) (i32.const 98))
113 (assert_return (invoke "8s_good4" (i32.const 0)) (i32.const 99))
114 (assert_return (invoke "8s_good5" (i32.const 0)) (i32.const 122))
115
116 (assert_return (invoke "16u_good1" (i32.const 0)) (i32.const 25185))
117 (assert_return (invoke "16u_good2" (i32.const 0)) (i32.const 25185))
118 (assert_return (invoke "16u_good3" (i32.const 0)) (i32.const 25442))
119 (assert_return (invoke "16u_good4" (i32.const 0)) (i32.const 25699))
120 (assert_return (invoke "16u_good5" (i32.const 0)) (i32.const 122))
121
122 (assert_return (invoke "16s_good1" (i32.const 0)) (i32.const 25185))
123 (assert_return (invoke "16s_good2" (i32.const 0)) (i32.const 25185))
124 (assert_return (invoke "16s_good3" (i32.const 0)) (i32.const 25442))
125 (assert_return (invoke "16s_good4" (i32.const 0)) (i32.const 25699))
126 (assert_return (invoke "16s_good5" (i32.const 0)) (i32.const 122))
127
128 (assert_return (invoke "32_good1" (i32.const 0)) (i32.const 1684234849))
129 (assert_return (invoke "32_good2" (i32.const 0)) (i32.const 1684234849))
130 (assert_return (invoke "32_good3" (i32.const 0)) (i32.const 1701077858))
131 (assert_return (invoke "32_good4" (i32.const 0)) (i32.const 1717920867))
132 (assert_return (invoke "32_good5" (i32.const 0)) (i32.const 122))
133
134 (assert_return (invoke "8u_good1" (i32.const 65507)) (i32.const 0))
135 (assert_return (invoke "8u_good2" (i32.const 65507)) (i32.const 0))
136 (assert_return (invoke "8u_good3" (i32.const 65507)) (i32.const 0))
137 (assert_return (invoke "8u_good4" (i32.const 65507)) (i32.const 0))
138 (assert_return (invoke "8u_good5" (i32.const 65507)) (i32.const 0))
139
140 (assert_return (invoke "8s_good1" (i32.const 65507)) (i32.const 0))
141 (assert_return (invoke "8s_good2" (i32.const 65507)) (i32.const 0))
142 (assert_return (invoke "8s_good3" (i32.const 65507)) (i32.const 0))
143 (assert_return (invoke "8s_good4" (i32.const 65507)) (i32.const 0))
144 (assert_return (invoke "8s_good5" (i32.const 65507)) (i32.const 0))
145
146 (assert_return (invoke "16u_good1" (i32.const 65507)) (i32.const 0))
147 (assert_return (invoke "16u_good2" (i32.const 65507)) (i32.const 0))
148 (assert_return (invoke "16u_good3" (i32.const 65507)) (i32.const 0))
149 (assert_return (invoke "16u_good4" (i32.const 65507)) (i32.const 0))
150 (assert_return (invoke "16u_good5" (i32.const 65507)) (i32.const 0))
151
152 (assert_return (invoke "16s_good1" (i32.const 65507)) (i32.const 0))
153 (assert_return (invoke "16s_good2" (i32.const 65507)) (i32.const 0))
154 (assert_return (invoke "16s_good3" (i32.const 65507)) (i32.const 0))
155 (assert_return (invoke "16s_good4" (i32.const 65507)) (i32.const 0))
156 (assert_return (invoke "16s_good5" (i32.const 65507)) (i32.const 0))
157
158 (assert_return (invoke "32_good1" (i32.const 65507)) (i32.const 0))
159 (assert_return (invoke "32_good2" (i32.const 65507)) (i32.const 0))
160 (assert_return (invoke "32_good3" (i32.const 65507)) (i32.const 0))
161 (assert_return (invoke "32_good4" (i32.const 65507)) (i32.const 0))
162 (assert_return (invoke "32_good5" (i32.const 65507)) (i32.const 0))
163
164 (assert_return (invoke "8u_good1" (i32.const 65508)) (i32.const 0))
165 (assert_return (invoke "8u_good2" (i32.const 65508)) (i32.const 0))
166 (assert_return (invoke "8u_good3" (i32.const 65508)) (i32.const 0))
167 (assert_return (invoke "8u_good4" (i32.const 65508)) (i32.const 0))
168 (assert_return (invoke "8u_good5" (i32.const 65508)) (i32.const 0))
169
170 (assert_return (invoke "8s_good1" (i32.const 65508)) (i32.const 0))
171 (assert_return (invoke "8s_good2" (i32.const 65508)) (i32.const 0))
172 (assert_return (invoke "8s_good3" (i32.const 65508)) (i32.const 0))
173 (assert_return (invoke "8s_good4" (i32.const 65508)) (i32.const 0))
174 (assert_return (invoke "8s_good5" (i32.const 65508)) (i32.const 0))
175
176 (assert_return (invoke "16u_good1" (i32.const 65508)) (i32.const 0))
177 (assert_return (invoke "16u_good2" (i32.const 65508)) (i32.const 0))
178 (assert_return (invoke "16u_good3" (i32.const 65508)) (i32.const 0))
179 (assert_return (invoke "16u_good4" (i32.const 65508)) (i32.const 0))
180 (assert_return (invoke "16u_good5" (i32.const 65508)) (i32.const 0))
181
182 (assert_return (invoke "16s_good1" (i32.const 65508)) (i32.const 0))
183 (assert_return (invoke "16s_good2" (i32.const 65508)) (i32.const 0))
184 (assert_return (invoke "16s_good3" (i32.const 65508)) (i32.const 0))
185 (assert_return (invoke "16s_good4" (i32.const 65508)) (i32.const 0))
186 (assert_return (invoke "16s_good5" (i32.const 65508)) (i32.const 0))
187
188 (assert_return (invoke "32_good1" (i32.const 65508)) (i32.const 0))
189 (assert_return (invoke "32_good2" (i32.const 65508)) (i32.const 0))
190 (assert_return (invoke "32_good3" (i32.const 65508)) (i32.const 0))
191 (assert_return (invoke "32_good4" (i32.const 65508)) (i32.const 0))
192 (assert_trap (invoke "32_good5" (i32.const 65508)) "out of bounds memory access")
193
194 (assert_trap (invoke "8u_good3" (i32.const -1)) "out of bounds memory access")
195 (assert_trap (invoke "8s_good3" (i32.const -1)) "out of bounds memory access")
196 (assert_trap (invoke "16u_good3" (i32.const -1)) "out of bounds memory access")
197 (assert_trap (invoke "16s_good3" (i32.const -1)) "out of bounds memory access")
198 (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access")
199 (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access")
200
201 (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access")
202 (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access")
203 (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access")
204 (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access")
205 (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access")
206
207 (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access")
208 (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access")
209 (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access")
210 (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access")
211 (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access")
212
213 (assert_invalid
214   (module quote
215     "(memory 1)"
216     "(func (drop (i32.load offset=4294967296 (i32.const 0))))"
217   )
218   "offset out of range"
219 )
220
221 ;; Load i64 data with different offset/align arguments
222
223 (module
224   (memory 1)
225   (data (i32.const 0) "abcdefghijklmnopqrstuvwxyz")
226
227   (func (export "8u_good1") (param $i i32) (result i64)
228     (i64.load8_u offset=0 (local.get $i))                   ;; 97 'a'
229   )
230   (func (export "8u_good2") (param $i i32) (result i64)
231     (i64.load8_u align=1 (local.get $i))                    ;; 97 'a'
232   )
233   (func (export "8u_good3") (param $i i32) (result i64)
234     (i64.load8_u offset=1 align=1 (local.get $i))           ;; 98 'b'
235   )
236   (func (export "8u_good4") (param $i i32) (result i64)
237     (i64.load8_u offset=2 align=1 (local.get $i))           ;; 99 'c'
238   )
239   (func (export "8u_good5") (param $i i32) (result i64)
240     (i64.load8_u offset=25 align=1 (local.get $i))          ;; 122 'z'
241   )
242
243   (func (export "8s_good1") (param $i i32) (result i64)
244     (i64.load8_s offset=0 (local.get $i))                   ;; 97 'a'
245   )
246   (func (export "8s_good2") (param $i i32) (result i64)
247     (i64.load8_s align=1 (local.get $i))                    ;; 97 'a'
248   )
249   (func (export "8s_good3") (param $i i32) (result i64)
250     (i64.load8_s offset=1 align=1 (local.get $i))           ;; 98 'b'
251   )
252   (func (export "8s_good4") (param $i i32) (result i64)
253     (i64.load8_s offset=2 align=1 (local.get $i))           ;; 99 'c'
254   )
255   (func (export "8s_good5") (param $i i32) (result i64)
256     (i64.load8_s offset=25 align=1 (local.get $i))          ;; 122 'z'
257   )
258
259   (func (export "16u_good1") (param $i i32) (result i64)
260     (i64.load16_u offset=0 (local.get $i))                 ;; 25185 'ab'
261   )
262   (func (export "16u_good2") (param $i i32) (result i64)
263     (i64.load16_u align=1 (local.get $i))                  ;; 25185 'ab'
264   )
265   (func (export "16u_good3") (param $i i32) (result i64)
266     (i64.load16_u offset=1 align=1 (local.get $i))         ;; 25442 'bc'
267   )
268   (func (export "16u_good4") (param $i i32) (result i64)
269     (i64.load16_u offset=2 align=2 (local.get $i))         ;; 25699 'cd'
270   )
271   (func (export "16u_good5") (param $i i32) (result i64)
272     (i64.load16_u offset=25 align=2 (local.get $i))        ;; 122 'z\0'
273   )
274
275   (func (export "16s_good1") (param $i i32) (result i64)
276     (i64.load16_s offset=0 (local.get $i))                 ;; 25185 'ab'
277   )
278   (func (export "16s_good2") (param $i i32) (result i64)
279     (i64.load16_s align=1 (local.get $i))                  ;; 25185 'ab'
280   )
281   (func (export "16s_good3") (param $i i32) (result i64)
282     (i64.load16_s offset=1 align=1 (local.get $i))         ;; 25442 'bc'
283   )
284   (func (export "16s_good4") (param $i i32) (result i64)
285     (i64.load16_s offset=2 align=2 (local.get $i))         ;; 25699 'cd'
286   )
287   (func (export "16s_good5") (param $i i32) (result i64)
288     (i64.load16_s offset=25 align=2 (local.get $i))        ;; 122 'z\0'
289   )
290
291   (func (export "32u_good1") (param $i i32) (result i64)
292     (i64.load32_u offset=0 (local.get $i))                 ;; 1684234849 'abcd'
293   )
294   (func (export "32u_good2") (param $i i32) (result i64)
295     (i64.load32_u align=1 (local.get $i))                  ;; 1684234849 'abcd'
296   )
297   (func (export "32u_good3") (param $i i32) (result i64)
298     (i64.load32_u offset=1 align=1 (local.get $i))         ;; 1701077858 'bcde'
299   )
300   (func (export "32u_good4") (param $i i32) (result i64)
301     (i64.load32_u offset=2 align=2 (local.get $i))         ;; 1717920867 'cdef'
302   )
303   (func (export "32u_good5") (param $i i32) (result i64)
304     (i64.load32_u offset=25 align=4 (local.get $i))        ;; 122 'z\0\0\0'
305   )
306
307   (func (export "32s_good1") (param $i i32) (result i64)
308     (i64.load32_s offset=0 (local.get $i))                 ;; 1684234849 'abcd'
309   )
310   (func (export "32s_good2") (param $i i32) (result i64)
311     (i64.load32_s align=1 (local.get $i))                  ;; 1684234849 'abcd'
312   )
313   (func (export "32s_good3") (param $i i32) (result i64)
314     (i64.load32_s offset=1 align=1 (local.get $i))         ;; 1701077858 'bcde'
315   )
316   (func (export "32s_good4") (param $i i32) (result i64)
317     (i64.load32_s offset=2 align=2 (local.get $i))         ;; 1717920867 'cdef'
318   )
319   (func (export "32s_good5") (param $i i32) (result i64)
320     (i64.load32_s offset=25 align=4 (local.get $i))        ;; 122 'z\0\0\0'
321   )
322
323   (func (export "64_good1") (param $i i32) (result i64)
324     (i64.load offset=0 (local.get $i))                     ;; 0x6867666564636261 'abcdefgh'
325   )
326   (func (export "64_good2") (param $i i32) (result i64)
327     (i64.load align=1 (local.get $i))                      ;; 0x6867666564636261 'abcdefgh'
328   )
329   (func (export "64_good3") (param $i i32) (result i64)
330     (i64.load offset=1 align=1 (local.get $i))             ;; 0x6968676665646362 'bcdefghi'
331   )
332   (func (export "64_good4") (param $i i32) (result i64)
333     (i64.load offset=2 align=2 (local.get $i))             ;; 0x6a69686766656463 'cdefghij'
334   )
335   (func (export "64_good5") (param $i i32) (result i64)
336     (i64.load offset=25 align=8 (local.get $i))            ;; 122 'z\0\0\0\0\0\0\0'
337   )
338
339   (func (export "8u_bad") (param $i i32)
340     (drop (i64.load8_u offset=4294967295 (local.get $i)))
341   )
342   (func (export "8s_bad") (param $i i32)
343     (drop (i64.load8_s offset=4294967295 (local.get $i)))
344   )
345   (func (export "16u_bad") (param $i i32)
346     (drop (i64.load16_u offset=4294967295 (local.get $i)))
347   )
348   (func (export "16s_bad") (param $i i32)
349     (drop (i64.load16_s offset=4294967295 (local.get $i)))
350   )
351   (func (export "32u_bad") (param $i i32)
352     (drop (i64.load32_u offset=4294967295 (local.get $i)))
353   )
354   (func (export "32s_bad") (param $i i32)
355     (drop (i64.load32_s offset=4294967295 (local.get $i)))
356   )
357   (func (export "64_bad") (param $i i32)
358     (drop (i64.load offset=4294967295 (local.get $i)))
359   )
360 )
361
362 (assert_return (invoke "8u_good1" (i32.const 0)) (i64.const 97))
363 (assert_return (invoke "8u_good2" (i32.const 0)) (i64.const 97))
364 (assert_return (invoke "8u_good3" (i32.const 0)) (i64.const 98))
365 (assert_return (invoke "8u_good4" (i32.const 0)) (i64.const 99))
366 (assert_return (invoke "8u_good5" (i32.const 0)) (i64.const 122))
367
368 (assert_return (invoke "8s_good1" (i32.const 0)) (i64.const 97))
369 (assert_return (invoke "8s_good2" (i32.const 0)) (i64.const 97))
370 (assert_return (invoke "8s_good3" (i32.const 0)) (i64.const 98))
371 (assert_return (invoke "8s_good4" (i32.const 0)) (i64.const 99))
372 (assert_return (invoke "8s_good5" (i32.const 0)) (i64.const 122))
373
374 (assert_return (invoke "16u_good1" (i32.const 0)) (i64.const 25185))
375 (assert_return (invoke "16u_good2" (i32.const 0)) (i64.const 25185))
376 (assert_return (invoke "16u_good3" (i32.const 0)) (i64.const 25442))
377 (assert_return (invoke "16u_good4" (i32.const 0)) (i64.const 25699))
378 (assert_return (invoke "16u_good5" (i32.const 0)) (i64.const 122))
379
380 (assert_return (invoke "16s_good1" (i32.const 0)) (i64.const 25185))
381 (assert_return (invoke "16s_good2" (i32.const 0)) (i64.const 25185))
382 (assert_return (invoke "16s_good3" (i32.const 0)) (i64.const 25442))
383 (assert_return (invoke "16s_good4" (i32.const 0)) (i64.const 25699))
384 (assert_return (invoke "16s_good5" (i32.const 0)) (i64.const 122))
385
386 (assert_return (invoke "32u_good1" (i32.const 0)) (i64.const 1684234849))
387 (assert_return (invoke "32u_good2" (i32.const 0)) (i64.const 1684234849))
388 (assert_return (invoke "32u_good3" (i32.const 0)) (i64.const 1701077858))
389 (assert_return (invoke "32u_good4" (i32.const 0)) (i64.const 1717920867))
390 (assert_return (invoke "32u_good5" (i32.const 0)) (i64.const 122))
391
392 (assert_return (invoke "32s_good1" (i32.const 0)) (i64.const 1684234849))
393 (assert_return (invoke "32s_good2" (i32.const 0)) (i64.const 1684234849))
394 (assert_return (invoke "32s_good3" (i32.const 0)) (i64.const 1701077858))
395 (assert_return (invoke "32s_good4" (i32.const 0)) (i64.const 1717920867))
396 (assert_return (invoke "32s_good5" (i32.const 0)) (i64.const 122))
397
398 (assert_return (invoke "64_good1" (i32.const 0)) (i64.const 0x6867666564636261))
399 (assert_return (invoke "64_good2" (i32.const 0)) (i64.const 0x6867666564636261))
400 (assert_return (invoke "64_good3" (i32.const 0)) (i64.const 0x6968676665646362))
401 (assert_return (invoke "64_good4" (i32.const 0)) (i64.const 0x6a69686766656463))
402 (assert_return (invoke "64_good5" (i32.const 0)) (i64.const 122))
403
404 (assert_return (invoke "8u_good1" (i32.const 65503)) (i64.const 0))
405 (assert_return (invoke "8u_good2" (i32.const 65503)) (i64.const 0))
406 (assert_return (invoke "8u_good3" (i32.const 65503)) (i64.const 0))
407 (assert_return (invoke "8u_good4" (i32.const 65503)) (i64.const 0))
408 (assert_return (invoke "8u_good5" (i32.const 65503)) (i64.const 0))
409
410 (assert_return (invoke "8s_good1" (i32.const 65503)) (i64.const 0))
411 (assert_return (invoke "8s_good2" (i32.const 65503)) (i64.const 0))
412 (assert_return (invoke "8s_good3" (i32.const 65503)) (i64.const 0))
413 (assert_return (invoke "8s_good4" (i32.const 65503)) (i64.const 0))
414 (assert_return (invoke "8s_good5" (i32.const 65503)) (i64.const 0))
415
416 (assert_return (invoke "16u_good1" (i32.const 65503)) (i64.const 0))
417 (assert_return (invoke "16u_good2" (i32.const 65503)) (i64.const 0))
418 (assert_return (invoke "16u_good3" (i32.const 65503)) (i64.const 0))
419 (assert_return (invoke "16u_good4" (i32.const 65503)) (i64.const 0))
420 (assert_return (invoke "16u_good5" (i32.const 65503)) (i64.const 0))
421
422 (assert_return (invoke "16s_good1" (i32.const 65503)) (i64.const 0))
423 (assert_return (invoke "16s_good2" (i32.const 65503)) (i64.const 0))
424 (assert_return (invoke "16s_good3" (i32.const 65503)) (i64.const 0))
425 (assert_return (invoke "16s_good4" (i32.const 65503)) (i64.const 0))
426 (assert_return (invoke "16s_good5" (i32.const 65503)) (i64.const 0))
427
428 (assert_return (invoke "32u_good1" (i32.const 65503)) (i64.const 0))
429 (assert_return (invoke "32u_good2" (i32.const 65503)) (i64.const 0))
430 (assert_return (invoke "32u_good3" (i32.const 65503)) (i64.const 0))
431 (assert_return (invoke "32u_good4" (i32.const 65503)) (i64.const 0))
432 (assert_return (invoke "32u_good5" (i32.const 65503)) (i64.const 0))
433
434 (assert_return (invoke "32s_good1" (i32.const 65503)) (i64.const 0))
435 (assert_return (invoke "32s_good2" (i32.const 65503)) (i64.const 0))
436 (assert_return (invoke "32s_good3" (i32.const 65503)) (i64.const 0))
437 (assert_return (invoke "32s_good4" (i32.const 65503)) (i64.const 0))
438 (assert_return (invoke "32s_good5" (i32.const 65503)) (i64.const 0))
439
440 (assert_return (invoke "64_good1" (i32.const 65503)) (i64.const 0))
441 (assert_return (invoke "64_good2" (i32.const 65503)) (i64.const 0))
442 (assert_return (invoke "64_good3" (i32.const 65503)) (i64.const 0))
443 (assert_return (invoke "64_good4" (i32.const 65503)) (i64.const 0))
444 (assert_return (invoke "64_good5" (i32.const 65503)) (i64.const 0))
445
446 (assert_return (invoke "8u_good1" (i32.const 65504)) (i64.const 0))
447 (assert_return (invoke "8u_good2" (i32.const 65504)) (i64.const 0))
448 (assert_return (invoke "8u_good3" (i32.const 65504)) (i64.const 0))
449 (assert_return (invoke "8u_good4" (i32.const 65504)) (i64.const 0))
450 (assert_return (invoke "8u_good5" (i32.const 65504)) (i64.const 0))
451
452 (assert_return (invoke "8s_good1" (i32.const 65504)) (i64.const 0))
453 (assert_return (invoke "8s_good2" (i32.const 65504)) (i64.const 0))
454 (assert_return (invoke "8s_good3" (i32.const 65504)) (i64.const 0))
455 (assert_return (invoke "8s_good4" (i32.const 65504)) (i64.const 0))
456 (assert_return (invoke "8s_good5" (i32.const 65504)) (i64.const 0))
457
458 (assert_return (invoke "16u_good1" (i32.const 65504)) (i64.const 0))
459 (assert_return (invoke "16u_good2" (i32.const 65504)) (i64.const 0))
460 (assert_return (invoke "16u_good3" (i32.const 65504)) (i64.const 0))
461 (assert_return (invoke "16u_good4" (i32.const 65504)) (i64.const 0))
462 (assert_return (invoke "16u_good5" (i32.const 65504)) (i64.const 0))
463
464 (assert_return (invoke "16s_good1" (i32.const 65504)) (i64.const 0))
465 (assert_return (invoke "16s_good2" (i32.const 65504)) (i64.const 0))
466 (assert_return (invoke "16s_good3" (i32.const 65504)) (i64.const 0))
467 (assert_return (invoke "16s_good4" (i32.const 65504)) (i64.const 0))
468 (assert_return (invoke "16s_good5" (i32.const 65504)) (i64.const 0))
469
470 (assert_return (invoke "32u_good1" (i32.const 65504)) (i64.const 0))
471 (assert_return (invoke "32u_good2" (i32.const 65504)) (i64.const 0))
472 (assert_return (invoke "32u_good3" (i32.const 65504)) (i64.const 0))
473 (assert_return (invoke "32u_good4" (i32.const 65504)) (i64.const 0))
474 (assert_return (invoke "32u_good5" (i32.const 65504)) (i64.const 0))
475
476 (assert_return (invoke "32s_good1" (i32.const 65504)) (i64.const 0))
477 (assert_return (invoke "32s_good2" (i32.const 65504)) (i64.const 0))
478 (assert_return (invoke "32s_good3" (i32.const 65504)) (i64.const 0))
479 (assert_return (invoke "32s_good4" (i32.const 65504)) (i64.const 0))
480 (assert_return (invoke "32s_good5" (i32.const 65504)) (i64.const 0))
481
482 (assert_return (invoke "64_good1" (i32.const 65504)) (i64.const 0))
483 (assert_return (invoke "64_good2" (i32.const 65504)) (i64.const 0))
484 (assert_return (invoke "64_good3" (i32.const 65504)) (i64.const 0))
485 (assert_return (invoke "64_good4" (i32.const 65504)) (i64.const 0))
486 (assert_trap (invoke "64_good5" (i32.const 65504)) "out of bounds memory access")
487
488 (assert_trap (invoke "8u_good3" (i32.const -1)) "out of bounds memory access")
489 (assert_trap (invoke "8s_good3" (i32.const -1)) "out of bounds memory access")
490 (assert_trap (invoke "16u_good3" (i32.const -1)) "out of bounds memory access")
491 (assert_trap (invoke "16s_good3" (i32.const -1)) "out of bounds memory access")
492 (assert_trap (invoke "32u_good3" (i32.const -1)) "out of bounds memory access")
493 (assert_trap (invoke "32s_good3" (i32.const -1)) "out of bounds memory access")
494 (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access")
495
496 (assert_trap (invoke "8u_bad" (i32.const 0)) "out of bounds memory access")
497 (assert_trap (invoke "8s_bad" (i32.const 0)) "out of bounds memory access")
498 (assert_trap (invoke "16u_bad" (i32.const 0)) "out of bounds memory access")
499 (assert_trap (invoke "16s_bad" (i32.const 0)) "out of bounds memory access")
500 (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access")
501 (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access")
502 (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access")
503
504 (assert_trap (invoke "8u_bad" (i32.const 1)) "out of bounds memory access")
505 (assert_trap (invoke "8s_bad" (i32.const 1)) "out of bounds memory access")
506 (assert_trap (invoke "16u_bad" (i32.const 1)) "out of bounds memory access")
507 (assert_trap (invoke "16s_bad" (i32.const 1)) "out of bounds memory access")
508 (assert_trap (invoke "32u_bad" (i32.const 0)) "out of bounds memory access")
509 (assert_trap (invoke "32s_bad" (i32.const 0)) "out of bounds memory access")
510 (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access")
511
512 ;; Load f32 data with different offset/align arguments
513
514 (module
515   (memory 1)
516   (data (i32.const 0) "\00\00\00\00\00\00\a0\7f\01\00\d0\7f")
517
518   (func (export "32_good1") (param $i i32) (result f32)
519     (f32.load offset=0 (local.get $i))                   ;; 0.0 '\00\00\00\00'
520   )
521   (func (export "32_good2") (param $i i32) (result f32)
522     (f32.load align=1 (local.get $i))                    ;; 0.0 '\00\00\00\00'
523   )
524   (func (export "32_good3") (param $i i32) (result f32)
525     (f32.load offset=1 align=1 (local.get $i))           ;; 0.0 '\00\00\00\00'
526   )
527   (func (export "32_good4") (param $i i32) (result f32)
528     (f32.load offset=2 align=2 (local.get $i))           ;; 0.0 '\00\00\00\00'
529   )
530   (func (export "32_good5") (param $i i32) (result f32)
531     (f32.load offset=8 align=4 (local.get $i))           ;; nan:0x500001 '\01\00\d0\7f'
532   )
533   (func (export "32_bad") (param $i i32)
534     (drop (f32.load offset=4294967295 (local.get $i)))
535   )
536 )
537
538 (assert_return (invoke "32_good1" (i32.const 0)) (f32.const 0.0))
539 (assert_return (invoke "32_good2" (i32.const 0)) (f32.const 0.0))
540 (assert_return (invoke "32_good3" (i32.const 0)) (f32.const 0.0))
541 (assert_return (invoke "32_good4" (i32.const 0)) (f32.const 0.0))
542 (assert_return (invoke "32_good5" (i32.const 0)) (f32.const nan:0x500001))
543
544 (assert_return (invoke "32_good1" (i32.const 65524)) (f32.const 0.0))
545 (assert_return (invoke "32_good2" (i32.const 65524)) (f32.const 0.0))
546 (assert_return (invoke "32_good3" (i32.const 65524)) (f32.const 0.0))
547 (assert_return (invoke "32_good4" (i32.const 65524)) (f32.const 0.0))
548 (assert_return (invoke "32_good5" (i32.const 65524)) (f32.const 0.0))
549
550 (assert_return (invoke "32_good1" (i32.const 65525)) (f32.const 0.0))
551 (assert_return (invoke "32_good2" (i32.const 65525)) (f32.const 0.0))
552 (assert_return (invoke "32_good3" (i32.const 65525)) (f32.const 0.0))
553 (assert_return (invoke "32_good4" (i32.const 65525)) (f32.const 0.0))
554 (assert_trap (invoke "32_good5" (i32.const 65525)) "out of bounds memory access")
555
556 (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access")
557 (assert_trap (invoke "32_good3" (i32.const -1)) "out of bounds memory access")
558
559 (assert_trap (invoke "32_bad" (i32.const 0)) "out of bounds memory access")
560 (assert_trap (invoke "32_bad" (i32.const 1)) "out of bounds memory access")
561
562 ;; Load f64 data with different offset/align arguments
563
564 (module
565   (memory 1)
566   (data (i32.const 0) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f4\7f\01\00\00\00\00\00\fc\7f")
567
568   (func (export "64_good1") (param $i i32) (result f64)
569     (f64.load offset=0 (local.get $i))                     ;; 0.0 '\00\00\00\00\00\00\00\00'
570   )
571   (func (export "64_good2") (param $i i32) (result f64)
572     (f64.load align=1 (local.get $i))                      ;; 0.0 '\00\00\00\00\00\00\00\00'
573   )
574   (func (export "64_good3") (param $i i32) (result f64)
575     (f64.load offset=1 align=1 (local.get $i))             ;; 0.0 '\00\00\00\00\00\00\00\00'
576   )
577   (func (export "64_good4") (param $i i32) (result f64)
578     (f64.load offset=2 align=2 (local.get $i))             ;; 0.0 '\00\00\00\00\00\00\00\00'
579   )
580   (func (export "64_good5") (param $i i32) (result f64)
581     (f64.load offset=18 align=8 (local.get $i))            ;; nan:0xc000000000001 '\01\00\00\00\00\00\fc\7f'
582   )
583   (func (export "64_bad") (param $i i32)
584     (drop (f64.load offset=4294967295 (local.get $i)))
585   )
586 )
587
588 (assert_return (invoke "64_good1" (i32.const 0)) (f64.const 0.0))
589 (assert_return (invoke "64_good2" (i32.const 0)) (f64.const 0.0))
590 (assert_return (invoke "64_good3" (i32.const 0)) (f64.const 0.0))
591 (assert_return (invoke "64_good4" (i32.const 0)) (f64.const 0.0))
592 (assert_return (invoke "64_good5" (i32.const 0)) (f64.const nan:0xc000000000001))
593
594 (assert_return (invoke "64_good1" (i32.const 65510)) (f64.const 0.0))
595 (assert_return (invoke "64_good2" (i32.const 65510)) (f64.const 0.0))
596 (assert_return (invoke "64_good3" (i32.const 65510)) (f64.const 0.0))
597 (assert_return (invoke "64_good4" (i32.const 65510)) (f64.const 0.0))
598 (assert_return (invoke "64_good5" (i32.const 65510)) (f64.const 0.0))
599
600 (assert_return (invoke "64_good1" (i32.const 65511)) (f64.const 0.0))
601 (assert_return (invoke "64_good2" (i32.const 65511)) (f64.const 0.0))
602 (assert_return (invoke "64_good3" (i32.const 65511)) (f64.const 0.0))
603 (assert_return (invoke "64_good4" (i32.const 65511)) (f64.const 0.0))
604 (assert_trap (invoke "64_good5" (i32.const 65511)) "out of bounds memory access")
605
606 (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access")
607 (assert_trap (invoke "64_good3" (i32.const -1)) "out of bounds memory access")
608
609 (assert_trap (invoke "64_bad" (i32.const 0)) "out of bounds memory access")
610 (assert_trap (invoke "64_bad" (i32.const 1)) "out of bounds memory access")