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