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