1;;! multi_memory = true
2;;! bulk_memory = true
3
4(module
5  (memory $m1 1)
6  (memory $m2 1)
7
8  (func (export "store1") (param i32 i64)
9      local.get 0
10      local.get 1
11      i64.store $m1)
12
13  (func (export "store2") (param i32 i64)
14      local.get 0
15      local.get 1
16      i64.store $m2)
17
18  (func (export "load1") (param i32) (result i64)
19      local.get 0
20      i64.load $m1)
21
22  (func (export "load2") (param i32) (result i64)
23      local.get 0
24      i64.load $m2)
25)
26
27(invoke "store1" (i32.const 0) (i64.const 1))
28(invoke "store2" (i32.const 0) (i64.const 2))
29(assert_return (invoke "load1" (i32.const 0)) (i64.const 1))
30(assert_return (invoke "load2" (i32.const 0)) (i64.const 2))
31
32(module $a
33  (memory (export "mem") 1)
34
35  (func (export "store") (param i32 i64)
36      local.get 0
37      local.get 1
38      i64.store)
39
40  (func (export "load") (param i32) (result i64)
41      local.get 0
42      i64.load)
43)
44
45(module $b
46  (memory (export "mem") 1)
47
48  (func (export "store") (param i32 i64)
49      local.get 0
50      local.get 1
51      i64.store)
52
53  (func (export "load") (param i32) (result i64)
54      local.get 0
55      i64.load)
56)
57
58(invoke $a "store" (i32.const 0) (i64.const 1))
59(invoke $b "store" (i32.const 0) (i64.const 2))
60(assert_return (invoke $a "load" (i32.const 0)) (i64.const 1))
61(assert_return (invoke $b "load" (i32.const 0)) (i64.const 2))
62
63(module $c
64  (import "a" "mem" (memory $m1 1))
65  (import "b" "mem" (memory $m2 1))
66
67  (func (export "store1") (param i32 i64)
68      local.get 0
69      local.get 1
70      i64.store $m1)
71
72  (func (export "store2") (param i32 i64)
73      local.get 0
74      local.get 1
75      i64.store $m2)
76
77  (func (export "load1") (param i32) (result i64)
78      local.get 0
79      i64.load $m1)
80
81  (func (export "load2") (param i32) (result i64)
82      local.get 0
83      i64.load $m2)
84)
85
86(invoke "store1" (i32.const 0) (i64.const 1))
87(invoke "store2" (i32.const 0) (i64.const 2))
88(assert_return (invoke "load1" (i32.const 0)) (i64.const 1))
89
90(assert_return (invoke "load2" (i32.const 0)) (i64.const 2))
91
92(module
93  (memory $m1 1)
94  (memory $m2 2)
95
96  (func (export "grow1") (param i32) (result i32)
97      local.get 0
98      memory.grow $m1)
99
100  (func (export "grow2") (param i32) (result i32)
101      local.get 0
102      memory.grow $m2)
103
104  (func (export "size1") (result i32) memory.size $m1)
105  (func (export "size2") (result i32) memory.size $m2)
106)
107
108(assert_return (invoke "size1") (i32.const 1))
109(assert_return (invoke "size2") (i32.const 2))
110(assert_return (invoke "grow1" (i32.const 3)) (i32.const 1))
111(assert_return (invoke "grow1" (i32.const 4)) (i32.const 4))
112(assert_return (invoke "grow1" (i32.const 1)) (i32.const 8))
113(assert_return (invoke "grow2" (i32.const 1)) (i32.const 2))
114(assert_return (invoke "grow2" (i32.const 1)) (i32.const 3))
115
116(module
117  (memory $m1 1)
118  (memory $m2 1)
119
120  (func (export "init1") (result i32)
121      i32.const 1
122      i32.const 0
123      i32.const 4
124      memory.init $m1 $d
125      i32.const 1
126      i32.load)
127
128  (func (export "init2") (result i32)
129      i32.const 1
130      i32.const 4
131      i32.const 4
132      memory.init $m2 $d
133      i32.const 1
134      i32.load $m2)
135
136  (data $d "\01\00\00\00" "\02\00\00\00")
137)
138
139(assert_return (invoke "init1") (i32.const 1))
140(assert_return (invoke "init2") (i32.const 2))
141
142(module
143  (memory $m1 1)
144  (memory $m2 1)
145
146  (func (export "fill1") (result i32)
147      i32.const 1
148      i32.const 0x01
149      i32.const 4
150      memory.fill $m1
151      i32.const 1
152      i32.load)
153
154  (func (export "fill2") (result i32)
155      i32.const 1
156      i32.const 0x02
157      i32.const 2
158      memory.fill $m2
159      i32.const 1
160      i32.load $m2)
161)
162
163(assert_return (invoke "fill1") (i32.const 0x01010101))
164(assert_return (invoke "fill2") (i32.const 0x0202))
165