e10c3497a1d3efc0329431079c6111b25dd3ec50
[platform/framework/web/lwnode.git] /
1 ;; Test memory section structure
2
3 (module (memory 0))
4 (module (memory 1))
5 (module (memory 0 0))
6 (module (memory 0 1))
7 (module (memory 1 256))
8 (module (memory 0 65536))
9 (module (memory 0 0 shared))
10 (module (memory 1 2 shared))
11
12 (assert_invalid (module (memory 1 shared)) "shared memory must have maximum")
13
14 (assert_invalid (module (memory 0) (memory 0)) "multiple memories")
15 (assert_invalid (module (memory (import "spectest" "memory") 0) (memory 0)) "multiple memories")
16
17 (module (memory (data)) (func (export "memsize") (result i32) (memory.size)))
18 (assert_return (invoke "memsize") (i32.const 0))
19 (module (memory (data "")) (func (export "memsize") (result i32) (memory.size)))
20 (assert_return (invoke "memsize") (i32.const 0))
21 (module (memory (data "x")) (func (export "memsize") (result i32) (memory.size)))
22 (assert_return (invoke "memsize") (i32.const 1))
23
24 (assert_invalid (module (data (i32.const 0))) "unknown memory")
25 (assert_invalid (module (data (i32.const 0) "")) "unknown memory")
26 (assert_invalid (module (data (i32.const 0) "x")) "unknown memory")
27
28 (assert_invalid
29   (module (func (drop (f32.load (i32.const 0)))))
30   "unknown memory"
31 )
32 (assert_invalid
33   (module (func (f32.store (i32.const 0) (f32.const 0))))
34   "unknown memory"
35 )
36 (assert_invalid
37   (module (func (drop (i32.load8_s (i32.const 0)))))
38   "unknown memory"
39 )
40 (assert_invalid
41   (module (func (i32.store8 (i32.const 0) (i32.const 0))))
42   "unknown memory"
43 )
44 (assert_invalid
45   (module (func (drop (memory.size))))
46   "unknown memory"
47 )
48 (assert_invalid
49   (module (func (drop (memory.grow (i32.const 0)))))
50   "unknown memory"
51 )
52
53
54 (assert_invalid
55   (module (memory 1 0))
56   "size minimum must not be greater than maximum"
57 )
58 (assert_invalid
59   (module (memory 65537))
60   "memory size must be at most 65536 pages (4GiB)"
61 )
62 (assert_invalid
63   (module (memory 2147483648))
64   "memory size must be at most 65536 pages (4GiB)"
65 )
66 (assert_invalid
67   (module (memory 4294967295))
68   "memory size must be at most 65536 pages (4GiB)"
69 )
70 (assert_invalid
71   (module (memory 0 65537))
72   "memory size must be at most 65536 pages (4GiB)"
73 )
74 (assert_invalid
75   (module (memory 0 2147483648))
76   "memory size must be at most 65536 pages (4GiB)"
77 )
78 (assert_invalid
79   (module (memory 0 4294967295))
80   "memory size must be at most 65536 pages (4GiB)"
81 )
82
83 (assert_malformed
84   (module quote "(memory 0x1_0000_0000)")
85   "i32 constant out of range"
86 )
87 (assert_malformed
88   (module quote "(memory 0x1_0000_0000 0x1_0000_0000)")
89   "i32 constant out of range"
90 )
91 (assert_malformed
92   (module quote "(memory 0 0x1_0000_0000)")
93   "i32 constant out of range"
94 )
95
96 (module
97   (memory 1)
98   (data (i32.const 0) "ABC\a7D") (data (i32.const 20) "WASM")
99
100   ;; Data section
101   (func (export "data") (result i32)
102     (i32.and
103       (i32.and
104         (i32.and
105           (i32.eq (i32.load8_u (i32.const 0)) (i32.const 65))
106           (i32.eq (i32.load8_u (i32.const 3)) (i32.const 167))
107         )
108         (i32.and
109           (i32.eq (i32.load8_u (i32.const 6)) (i32.const 0))
110           (i32.eq (i32.load8_u (i32.const 19)) (i32.const 0))
111         )
112       )
113       (i32.and
114         (i32.and
115           (i32.eq (i32.load8_u (i32.const 20)) (i32.const 87))
116           (i32.eq (i32.load8_u (i32.const 23)) (i32.const 77))
117         )
118         (i32.and
119           (i32.eq (i32.load8_u (i32.const 24)) (i32.const 0))
120           (i32.eq (i32.load8_u (i32.const 1023)) (i32.const 0))
121         )
122       )
123     )
124   )
125
126   ;; Memory cast
127   (func (export "cast") (result f64)
128     (i64.store (i32.const 8) (i64.const -12345))
129     (if
130       (f64.eq
131         (f64.load (i32.const 8))
132         (f64.reinterpret_i64 (i64.const -12345))
133       )
134       (then (return (f64.const 0)))
135     )
136     (i64.store align=1 (i32.const 9) (i64.const 0))
137     (i32.store16 align=1 (i32.const 15) (i32.const 16453))
138     (f64.load align=1 (i32.const 9))
139   )
140
141   ;; Sign and zero extending memory loads
142   (func (export "i32_load8_s") (param $i i32) (result i32)
143         (i32.store8 (i32.const 8) (local.get $i))
144         (i32.load8_s (i32.const 8))
145   )
146   (func (export "i32_load8_u") (param $i i32) (result i32)
147         (i32.store8 (i32.const 8) (local.get $i))
148         (i32.load8_u (i32.const 8))
149   )
150   (func (export "i32_load16_s") (param $i i32) (result i32)
151         (i32.store16 (i32.const 8) (local.get $i))
152         (i32.load16_s (i32.const 8))
153   )
154   (func (export "i32_load16_u") (param $i i32) (result i32)
155         (i32.store16 (i32.const 8) (local.get $i))
156         (i32.load16_u (i32.const 8))
157   )
158   (func (export "i64_load8_s") (param $i i64) (result i64)
159         (i64.store8 (i32.const 8) (local.get $i))
160         (i64.load8_s (i32.const 8))
161   )
162   (func (export "i64_load8_u") (param $i i64) (result i64)
163         (i64.store8 (i32.const 8) (local.get $i))
164         (i64.load8_u (i32.const 8))
165   )
166   (func (export "i64_load16_s") (param $i i64) (result i64)
167         (i64.store16 (i32.const 8) (local.get $i))
168         (i64.load16_s (i32.const 8))
169   )
170   (func (export "i64_load16_u") (param $i i64) (result i64)
171         (i64.store16 (i32.const 8) (local.get $i))
172         (i64.load16_u (i32.const 8))
173   )
174   (func (export "i64_load32_s") (param $i i64) (result i64)
175         (i64.store32 (i32.const 8) (local.get $i))
176         (i64.load32_s (i32.const 8))
177   )
178   (func (export "i64_load32_u") (param $i i64) (result i64)
179         (i64.store32 (i32.const 8) (local.get $i))
180         (i64.load32_u (i32.const 8))
181   )
182 )
183
184 (assert_return (invoke "data") (i32.const 1))
185 (assert_return (invoke "cast") (f64.const 42.0))
186
187 (assert_return (invoke "i32_load8_s" (i32.const -1)) (i32.const -1))
188 (assert_return (invoke "i32_load8_u" (i32.const -1)) (i32.const 255))
189 (assert_return (invoke "i32_load16_s" (i32.const -1)) (i32.const -1))
190 (assert_return (invoke "i32_load16_u" (i32.const -1)) (i32.const 65535))
191
192 (assert_return (invoke "i32_load8_s" (i32.const 100)) (i32.const 100))
193 (assert_return (invoke "i32_load8_u" (i32.const 200)) (i32.const 200))
194 (assert_return (invoke "i32_load16_s" (i32.const 20000)) (i32.const 20000))
195 (assert_return (invoke "i32_load16_u" (i32.const 40000)) (i32.const 40000))
196
197 (assert_return (invoke "i32_load8_s" (i32.const 0xfedc6543)) (i32.const 0x43))
198 (assert_return (invoke "i32_load8_s" (i32.const 0x3456cdef)) (i32.const 0xffffffef))
199 (assert_return (invoke "i32_load8_u" (i32.const 0xfedc6543)) (i32.const 0x43))
200 (assert_return (invoke "i32_load8_u" (i32.const 0x3456cdef)) (i32.const 0xef))
201 (assert_return (invoke "i32_load16_s" (i32.const 0xfedc6543)) (i32.const 0x6543))
202 (assert_return (invoke "i32_load16_s" (i32.const 0x3456cdef)) (i32.const 0xffffcdef))
203 (assert_return (invoke "i32_load16_u" (i32.const 0xfedc6543)) (i32.const 0x6543))
204 (assert_return (invoke "i32_load16_u" (i32.const 0x3456cdef)) (i32.const 0xcdef))
205
206 (assert_return (invoke "i64_load8_s" (i64.const -1)) (i64.const -1))
207 (assert_return (invoke "i64_load8_u" (i64.const -1)) (i64.const 255))
208 (assert_return (invoke "i64_load16_s" (i64.const -1)) (i64.const -1))
209 (assert_return (invoke "i64_load16_u" (i64.const -1)) (i64.const 65535))
210 (assert_return (invoke "i64_load32_s" (i64.const -1)) (i64.const -1))
211 (assert_return (invoke "i64_load32_u" (i64.const -1)) (i64.const 4294967295))
212
213 (assert_return (invoke "i64_load8_s" (i64.const 100)) (i64.const 100))
214 (assert_return (invoke "i64_load8_u" (i64.const 200)) (i64.const 200))
215 (assert_return (invoke "i64_load16_s" (i64.const 20000)) (i64.const 20000))
216 (assert_return (invoke "i64_load16_u" (i64.const 40000)) (i64.const 40000))
217 (assert_return (invoke "i64_load32_s" (i64.const 20000)) (i64.const 20000))
218 (assert_return (invoke "i64_load32_u" (i64.const 40000)) (i64.const 40000))
219
220 (assert_return (invoke "i64_load8_s" (i64.const 0xfedcba9856346543)) (i64.const 0x43))
221 (assert_return (invoke "i64_load8_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffffffffffef))
222 (assert_return (invoke "i64_load8_u" (i64.const 0xfedcba9856346543)) (i64.const 0x43))
223 (assert_return (invoke "i64_load8_u" (i64.const 0x3456436598bacdef)) (i64.const 0xef))
224 (assert_return (invoke "i64_load16_s" (i64.const 0xfedcba9856346543)) (i64.const 0x6543))
225 (assert_return (invoke "i64_load16_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffffffffcdef))
226 (assert_return (invoke "i64_load16_u" (i64.const 0xfedcba9856346543)) (i64.const 0x6543))
227 (assert_return (invoke "i64_load16_u" (i64.const 0x3456436598bacdef)) (i64.const 0xcdef))
228 (assert_return (invoke "i64_load32_s" (i64.const 0xfedcba9856346543)) (i64.const 0x56346543))
229 (assert_return (invoke "i64_load32_s" (i64.const 0x3456436598bacdef)) (i64.const 0xffffffff98bacdef))
230 (assert_return (invoke "i64_load32_u" (i64.const 0xfedcba9856346543)) (i64.const 0x56346543))
231 (assert_return (invoke "i64_load32_u" (i64.const 0x3456436598bacdef)) (i64.const 0x98bacdef))
232
233 ;; Duplicate identifier errors
234
235 (assert_malformed (module quote
236   "(memory $foo 1)"
237   "(memory $foo 1)")
238   "duplicate memory")
239 (assert_malformed (module quote
240   "(import \"\" \"\" (memory $foo 1))"
241   "(memory $foo 1)")
242   "duplicate memory")
243 (assert_malformed (module quote
244   "(import \"\" \"\" (memory $foo 1))"
245   "(import \"\" \"\" (memory $foo 1))")
246   "duplicate memory")