1 ;; Test memory section structure
7 (module (memory 1 256))
8 (module (memory 0 65536))
10 (assert_invalid (module (memory 0) (memory 0)) "multiple memories")
11 (assert_invalid (module (memory (import "spectest" "memory") 0) (memory 0)) "multiple memories")
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))
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")
25 (module (func (drop (f32.load (i32.const 0)))))
29 (module (func (f32.store (i32.const 0) (f32.const 0))))
33 (module (func (drop (i32.load8_s (i32.const 0)))))
37 (module (func (i32.store8 (i32.const 0) (i32.const 0))))
41 (module (func (drop (memory.size))))
45 (module (func (drop (memory.grow (i32.const 0)))))
52 "size minimum must not be greater than maximum"
55 (module (memory 65537))
56 "memory size must be at most 65536 pages (4GiB)"
59 (module (memory 2147483648))
60 "memory size must be at most 65536 pages (4GiB)"
63 (module (memory 4294967295))
64 "memory size must be at most 65536 pages (4GiB)"
67 (module (memory 0 65537))
68 "memory size must be at most 65536 pages (4GiB)"
71 (module (memory 0 2147483648))
72 "memory size must be at most 65536 pages (4GiB)"
75 (module (memory 0 4294967295))
76 "memory size must be at most 65536 pages (4GiB)"
80 (module quote "(memory 0x1_0000_0000)")
81 "memory size must be at most 65536 pages (4GiB)"
84 (module quote "(memory 0x1_0000_0000 0x1_0000_0000)")
85 "memory size must be at most 65536 pages (4GiB)"
88 (module quote "(memory 0 0x1_0000_0000)")
89 "memory size must be at most 65536 pages (4GiB)"
94 (data (i32.const 0) "ABC\a7D") (data (i32.const 20) "WASM")
97 (func (export "data") (result i32)
101 (i32.eq (i32.load8_u (i32.const 0)) (i32.const 65))
102 (i32.eq (i32.load8_u (i32.const 3)) (i32.const 167))
105 (i32.eq (i32.load8_u (i32.const 6)) (i32.const 0))
106 (i32.eq (i32.load8_u (i32.const 19)) (i32.const 0))
111 (i32.eq (i32.load8_u (i32.const 20)) (i32.const 87))
112 (i32.eq (i32.load8_u (i32.const 23)) (i32.const 77))
115 (i32.eq (i32.load8_u (i32.const 24)) (i32.const 0))
116 (i32.eq (i32.load8_u (i32.const 1023)) (i32.const 0))
123 (func (export "cast") (result f64)
124 (i64.store (i32.const 8) (i64.const -12345))
127 (f64.load (i32.const 8))
128 (f64.reinterpret_i64 (i64.const -12345))
130 (then (return (f64.const 0)))
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))
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))
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))
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))
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))
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))
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))
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))
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))
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))
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))
180 (assert_return (invoke "data") (i32.const 1))
181 (assert_return (invoke "cast") (f64.const 42.0))
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))
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))
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))
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))
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))
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))
229 ;; Duplicate identifier errors
231 (assert_malformed (module quote
235 (assert_malformed (module quote
236 "(import \"\" \"\" (memory $foo 1))"
239 (assert_malformed (module quote
240 "(import \"\" \"\" (memory $foo 1))"
241 "(import \"\" \"\" (memory $foo 1))")