9f3cd65dbb52953d5872f08637aaf210b98e1006
[platform/framework/web/lwnode.git] /
1 ;; atomic operations
2
3 (module
4   (memory 1 1 shared)
5
6   (func (export "init") (param $value i64) (i64.store (i32.const 0) (local.get $value)))
7
8   (func (export "i32.atomic.load") (param $addr i32) (result i32) (i32.atomic.load (local.get $addr)))
9   (func (export "i64.atomic.load") (param $addr i32) (result i64) (i64.atomic.load (local.get $addr)))
10   (func (export "i32.atomic.load8_u") (param $addr i32) (result i32) (i32.atomic.load8_u (local.get $addr)))
11   (func (export "i32.atomic.load16_u") (param $addr i32) (result i32) (i32.atomic.load16_u (local.get $addr)))
12   (func (export "i64.atomic.load8_u") (param $addr i32) (result i64) (i64.atomic.load8_u (local.get $addr)))
13   (func (export "i64.atomic.load16_u") (param $addr i32) (result i64) (i64.atomic.load16_u (local.get $addr)))
14   (func (export "i64.atomic.load32_u") (param $addr i32) (result i64) (i64.atomic.load32_u (local.get $addr)))
15
16   (func (export "i32.atomic.store") (param $addr i32) (param $value i32) (i32.atomic.store (local.get $addr) (local.get $value)))
17   (func (export "i64.atomic.store") (param $addr i32) (param $value i64) (i64.atomic.store (local.get $addr) (local.get $value)))
18   (func (export "i32.atomic.store8") (param $addr i32) (param $value i32) (i32.atomic.store8 (local.get $addr) (local.get $value)))
19   (func (export "i32.atomic.store16") (param $addr i32) (param $value i32) (i32.atomic.store16 (local.get $addr) (local.get $value)))
20   (func (export "i64.atomic.store8") (param $addr i32) (param $value i64) (i64.atomic.store8 (local.get $addr) (local.get $value)))
21   (func (export "i64.atomic.store16") (param $addr i32) (param $value i64) (i64.atomic.store16 (local.get $addr) (local.get $value)))
22   (func (export "i64.atomic.store32") (param $addr i32) (param $value i64) (i64.atomic.store32 (local.get $addr) (local.get $value)))
23
24   (func (export "i32.atomic.rmw.add") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.add (local.get $addr) (local.get $value)))
25   (func (export "i64.atomic.rmw.add") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.add (local.get $addr) (local.get $value)))
26   (func (export "i32.atomic.rmw8.add_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.add_u (local.get $addr) (local.get $value)))
27   (func (export "i32.atomic.rmw16.add_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.add_u (local.get $addr) (local.get $value)))
28   (func (export "i64.atomic.rmw8.add_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.add_u (local.get $addr) (local.get $value)))
29   (func (export "i64.atomic.rmw16.add_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.add_u (local.get $addr) (local.get $value)))
30   (func (export "i64.atomic.rmw32.add_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.add_u (local.get $addr) (local.get $value)))
31
32   (func (export "i32.atomic.rmw.sub") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.sub (local.get $addr) (local.get $value)))
33   (func (export "i64.atomic.rmw.sub") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.sub (local.get $addr) (local.get $value)))
34   (func (export "i32.atomic.rmw8.sub_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.sub_u (local.get $addr) (local.get $value)))
35   (func (export "i32.atomic.rmw16.sub_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.sub_u (local.get $addr) (local.get $value)))
36   (func (export "i64.atomic.rmw8.sub_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.sub_u (local.get $addr) (local.get $value)))
37   (func (export "i64.atomic.rmw16.sub_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.sub_u (local.get $addr) (local.get $value)))
38   (func (export "i64.atomic.rmw32.sub_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.sub_u (local.get $addr) (local.get $value)))
39
40   (func (export "i32.atomic.rmw.and") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.and (local.get $addr) (local.get $value)))
41   (func (export "i64.atomic.rmw.and") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.and (local.get $addr) (local.get $value)))
42   (func (export "i32.atomic.rmw8.and_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.and_u (local.get $addr) (local.get $value)))
43   (func (export "i32.atomic.rmw16.and_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.and_u (local.get $addr) (local.get $value)))
44   (func (export "i64.atomic.rmw8.and_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.and_u (local.get $addr) (local.get $value)))
45   (func (export "i64.atomic.rmw16.and_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.and_u (local.get $addr) (local.get $value)))
46   (func (export "i64.atomic.rmw32.and_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.and_u (local.get $addr) (local.get $value)))
47
48   (func (export "i32.atomic.rmw.or") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.or (local.get $addr) (local.get $value)))
49   (func (export "i64.atomic.rmw.or") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.or (local.get $addr) (local.get $value)))
50   (func (export "i32.atomic.rmw8.or_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.or_u (local.get $addr) (local.get $value)))
51   (func (export "i32.atomic.rmw16.or_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.or_u (local.get $addr) (local.get $value)))
52   (func (export "i64.atomic.rmw8.or_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.or_u (local.get $addr) (local.get $value)))
53   (func (export "i64.atomic.rmw16.or_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.or_u (local.get $addr) (local.get $value)))
54   (func (export "i64.atomic.rmw32.or_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.or_u (local.get $addr) (local.get $value)))
55
56   (func (export "i32.atomic.rmw.xor") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.xor (local.get $addr) (local.get $value)))
57   (func (export "i64.atomic.rmw.xor") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.xor (local.get $addr) (local.get $value)))
58   (func (export "i32.atomic.rmw8.xor_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.xor_u (local.get $addr) (local.get $value)))
59   (func (export "i32.atomic.rmw16.xor_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.xor_u (local.get $addr) (local.get $value)))
60   (func (export "i64.atomic.rmw8.xor_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.xor_u (local.get $addr) (local.get $value)))
61   (func (export "i64.atomic.rmw16.xor_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.xor_u (local.get $addr) (local.get $value)))
62   (func (export "i64.atomic.rmw32.xor_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.xor_u (local.get $addr) (local.get $value)))
63
64   (func (export "i32.atomic.rmw.xchg") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw.xchg (local.get $addr) (local.get $value)))
65   (func (export "i64.atomic.rmw.xchg") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw.xchg (local.get $addr) (local.get $value)))
66   (func (export "i32.atomic.rmw8.xchg_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw8.xchg_u (local.get $addr) (local.get $value)))
67   (func (export "i32.atomic.rmw16.xchg_u") (param $addr i32) (param $value i32) (result i32) (i32.atomic.rmw16.xchg_u (local.get $addr) (local.get $value)))
68   (func (export "i64.atomic.rmw8.xchg_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw8.xchg_u (local.get $addr) (local.get $value)))
69   (func (export "i64.atomic.rmw16.xchg_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw16.xchg_u (local.get $addr) (local.get $value)))
70   (func (export "i64.atomic.rmw32.xchg_u") (param $addr i32) (param $value i64) (result i64) (i64.atomic.rmw32.xchg_u (local.get $addr) (local.get $value)))
71
72   (func (export "i32.atomic.rmw.cmpxchg") (param $addr i32) (param $expected i32) (param $value i32) (result i32) (i32.atomic.rmw.cmpxchg (local.get $addr) (local.get $expected) (local.get $value)))
73   (func (export "i64.atomic.rmw.cmpxchg") (param $addr i32) (param $expected i64)  (param $value i64) (result i64) (i64.atomic.rmw.cmpxchg (local.get $addr) (local.get $expected) (local.get $value)))
74   (func (export "i32.atomic.rmw8.cmpxchg_u") (param $addr i32) (param $expected i32)  (param $value i32) (result i32) (i32.atomic.rmw8.cmpxchg_u (local.get $addr) (local.get $expected) (local.get $value)))
75   (func (export "i32.atomic.rmw16.cmpxchg_u") (param $addr i32) (param $expected i32)  (param $value i32) (result i32) (i32.atomic.rmw16.cmpxchg_u (local.get $addr) (local.get $expected) (local.get $value)))
76   (func (export "i64.atomic.rmw8.cmpxchg_u") (param $addr i32) (param $expected i64)  (param $value i64) (result i64) (i64.atomic.rmw8.cmpxchg_u (local.get $addr) (local.get $expected) (local.get $value)))
77   (func (export "i64.atomic.rmw16.cmpxchg_u") (param $addr i32) (param $expected i64)  (param $value i64) (result i64) (i64.atomic.rmw16.cmpxchg_u (local.get $addr) (local.get $expected) (local.get $value)))
78   (func (export "i64.atomic.rmw32.cmpxchg_u") (param $addr i32) (param $expected i64)  (param $value i64) (result i64) (i64.atomic.rmw32.cmpxchg_u (local.get $addr) (local.get $expected) (local.get $value)))
79
80 )
81
82 ;; *.atomic.load*
83
84 (invoke "init" (i64.const 0x0706050403020100))
85
86 (assert_return (invoke "i32.atomic.load" (i32.const 0)) (i32.const 0x03020100))
87 (assert_return (invoke "i32.atomic.load" (i32.const 4)) (i32.const 0x07060504))
88
89 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0706050403020100))
90
91 (assert_return (invoke "i32.atomic.load8_u" (i32.const 0)) (i32.const 0x00))
92 (assert_return (invoke "i32.atomic.load8_u" (i32.const 5)) (i32.const 0x05))
93
94 (assert_return (invoke "i32.atomic.load16_u" (i32.const 0)) (i32.const 0x0100))
95 (assert_return (invoke "i32.atomic.load16_u" (i32.const 6)) (i32.const 0x0706))
96
97 (assert_return (invoke "i64.atomic.load8_u" (i32.const 0)) (i64.const 0x00))
98 (assert_return (invoke "i64.atomic.load8_u" (i32.const 5)) (i64.const 0x05))
99
100 (assert_return (invoke "i64.atomic.load16_u" (i32.const 0)) (i64.const 0x0100))
101 (assert_return (invoke "i64.atomic.load16_u" (i32.const 6)) (i64.const 0x0706))
102
103 (assert_return (invoke "i64.atomic.load32_u" (i32.const 0)) (i64.const 0x03020100))
104 (assert_return (invoke "i64.atomic.load32_u" (i32.const 4)) (i64.const 0x07060504))
105
106 ;; *.atomic.store*
107
108 (invoke "init" (i64.const 0x0000000000000000))
109
110 (assert_return (invoke "i32.atomic.store" (i32.const 0) (i32.const 0xffeeddcc)))
111 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x00000000ffeeddcc))
112
113 (assert_return (invoke "i64.atomic.store" (i32.const 0) (i64.const 0x0123456789abcdef)))
114 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0123456789abcdef))
115
116 (assert_return (invoke "i32.atomic.store8" (i32.const 1) (i32.const 0x42)))
117 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0123456789ab42ef))
118
119 (assert_return (invoke "i32.atomic.store16" (i32.const 4) (i32.const 0x8844)))
120 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0123884489ab42ef))
121
122 (assert_return (invoke "i64.atomic.store8" (i32.const 1) (i64.const 0x99)))
123 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0123884489ab99ef))
124
125 (assert_return (invoke "i64.atomic.store16" (i32.const 4) (i64.const 0xcafe)))
126 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0123cafe89ab99ef))
127
128 (assert_return (invoke "i64.atomic.store32" (i32.const 4) (i64.const 0xdeadbeef)))
129 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0xdeadbeef89ab99ef))
130
131 ;; *.atomic.rmw*.add
132
133 (invoke "init" (i64.const 0x1111111111111111))
134 (assert_return (invoke "i32.atomic.rmw.add" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111))
135 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111123456789))
136
137 (invoke "init" (i64.const 0x1111111111111111))
138 (assert_return (invoke "i64.atomic.rmw.add" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111))
139 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1212121213131313))
140
141 (invoke "init" (i64.const 0x1111111111111111))
142 (assert_return (invoke "i32.atomic.rmw8.add_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11))
143 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111de))
144
145 (invoke "init" (i64.const 0x1111111111111111))
146 (assert_return (invoke "i32.atomic.rmw16.add_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111))
147 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111dc0f))
148
149 (invoke "init" (i64.const 0x1111111111111111))
150 (assert_return (invoke "i64.atomic.rmw8.add_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11))
151 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111153))
152
153 (invoke "init" (i64.const 0x1111111111111111))
154 (assert_return (invoke "i64.atomic.rmw16.add_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111))
155 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111d000))
156
157 (invoke "init" (i64.const 0x1111111111111111))
158 (assert_return (invoke "i64.atomic.rmw32.add_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111))
159 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111dbccb7f6))
160
161 ;; *.atomic.rmw*.sub
162
163 (invoke "init" (i64.const 0x1111111111111111))
164 (assert_return (invoke "i32.atomic.rmw.sub" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111))
165 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111fedcba99))
166
167 (invoke "init" (i64.const 0x1111111111111111))
168 (assert_return (invoke "i64.atomic.rmw.sub" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111))
169 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x101010100f0f0f0f))
170
171 (invoke "init" (i64.const 0x1111111111111111))
172 (assert_return (invoke "i32.atomic.rmw8.sub_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11))
173 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111144))
174
175 (invoke "init" (i64.const 0x1111111111111111))
176 (assert_return (invoke "i32.atomic.rmw16.sub_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111))
177 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111114613))
178
179 (invoke "init" (i64.const 0x1111111111111111))
180 (assert_return (invoke "i64.atomic.rmw8.sub_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11))
181 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111cf))
182
183 (invoke "init" (i64.const 0x1111111111111111))
184 (assert_return (invoke "i64.atomic.rmw16.sub_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111))
185 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111115222))
186
187 (invoke "init" (i64.const 0x1111111111111111))
188 (assert_return (invoke "i64.atomic.rmw32.sub_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111))
189 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111146556a2c))
190
191 ;; *.atomic.rmw*.and
192
193 (invoke "init" (i64.const 0x1111111111111111))
194 (assert_return (invoke "i32.atomic.rmw.and" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111))
195 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111110101010))
196
197 (invoke "init" (i64.const 0x1111111111111111))
198 (assert_return (invoke "i64.atomic.rmw.and" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111))
199 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0101010100000000))
200
201 (invoke "init" (i64.const 0x1111111111111111))
202 (assert_return (invoke "i32.atomic.rmw8.and_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11))
203 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111101))
204
205 (invoke "init" (i64.const 0x1111111111111111))
206 (assert_return (invoke "i32.atomic.rmw16.and_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111))
207 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111110010))
208
209 (invoke "init" (i64.const 0x1111111111111111))
210 (assert_return (invoke "i64.atomic.rmw8.and_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11))
211 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111100))
212
213 (invoke "init" (i64.const 0x1111111111111111))
214 (assert_return (invoke "i64.atomic.rmw16.and_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111))
215 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111001))
216
217 (invoke "init" (i64.const 0x1111111111111111))
218 (assert_return (invoke "i64.atomic.rmw32.and_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111))
219 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111100110001))
220
221 ;; *.atomic.rmw*.or
222
223 (invoke "init" (i64.const 0x1111111111111111))
224 (assert_return (invoke "i32.atomic.rmw.or" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111))
225 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111113355779))
226
227 (invoke "init" (i64.const 0x1111111111111111))
228 (assert_return (invoke "i64.atomic.rmw.or" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111))
229 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111113131313))
230
231 (invoke "init" (i64.const 0x1111111111111111))
232 (assert_return (invoke "i32.atomic.rmw8.or_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11))
233 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111dd))
234
235 (invoke "init" (i64.const 0x1111111111111111))
236 (assert_return (invoke "i32.atomic.rmw16.or_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111))
237 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111dbff))
238
239 (invoke "init" (i64.const 0x1111111111111111))
240 (assert_return (invoke "i64.atomic.rmw8.or_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11))
241 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111153))
242
243 (invoke "init" (i64.const 0x1111111111111111))
244 (assert_return (invoke "i64.atomic.rmw16.or_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111))
245 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111bfff))
246
247 (invoke "init" (i64.const 0x1111111111111111))
248 (assert_return (invoke "i64.atomic.rmw32.or_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111))
249 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111dbbbb7f5))
250
251 ;; *.atomic.rmw*.xor
252
253 (invoke "init" (i64.const 0x1111111111111111))
254 (assert_return (invoke "i32.atomic.rmw.xor" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111))
255 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111103254769))
256
257 (invoke "init" (i64.const 0x1111111111111111))
258 (assert_return (invoke "i64.atomic.rmw.xor" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111))
259 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1010101013131313))
260
261 (invoke "init" (i64.const 0x1111111111111111))
262 (assert_return (invoke "i32.atomic.rmw8.xor_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11))
263 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111dc))
264
265 (invoke "init" (i64.const 0x1111111111111111))
266 (assert_return (invoke "i32.atomic.rmw16.xor_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111))
267 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111dbef))
268
269 (invoke "init" (i64.const 0x1111111111111111))
270 (assert_return (invoke "i64.atomic.rmw8.xor_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11))
271 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111153))
272
273 (invoke "init" (i64.const 0x1111111111111111))
274 (assert_return (invoke "i64.atomic.rmw16.xor_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111))
275 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111affe))
276
277 (invoke "init" (i64.const 0x1111111111111111))
278 (assert_return (invoke "i64.atomic.rmw32.xor_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111))
279 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111dbaab7f4))
280
281 ;; *.atomic.rmw*.xchg
282
283 (invoke "init" (i64.const 0x1111111111111111))
284 (assert_return (invoke "i32.atomic.rmw.xchg" (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111))
285 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111112345678))
286
287 (invoke "init" (i64.const 0x1111111111111111))
288 (assert_return (invoke "i64.atomic.rmw.xchg" (i32.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111))
289 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0101010102020202))
290
291 (invoke "init" (i64.const 0x1111111111111111))
292 (assert_return (invoke "i32.atomic.rmw8.xchg_u" (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11))
293 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111cd))
294
295 (invoke "init" (i64.const 0x1111111111111111))
296 (assert_return (invoke "i32.atomic.rmw16.xchg_u" (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111))
297 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111cafe))
298
299 (invoke "init" (i64.const 0x1111111111111111))
300 (assert_return (invoke "i64.atomic.rmw8.xchg_u" (i32.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11))
301 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111142))
302
303 (invoke "init" (i64.const 0x1111111111111111))
304 (assert_return (invoke "i64.atomic.rmw16.xchg_u" (i32.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111))
305 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111beef))
306
307 (invoke "init" (i64.const 0x1111111111111111))
308 (assert_return (invoke "i64.atomic.rmw32.xchg_u" (i32.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111))
309 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111cabba6e5))
310
311 ;; *.atomic.rmw*.cmpxchg (compare false)
312
313 (invoke "init" (i64.const 0x1111111111111111))
314 (assert_return (invoke "i32.atomic.rmw.cmpxchg" (i32.const 0) (i32.const 0) (i32.const 0x12345678)) (i32.const 0x11111111))
315 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111))
316
317 (invoke "init" (i64.const 0x1111111111111111))
318 (assert_return (invoke "i64.atomic.rmw.cmpxchg" (i32.const 0) (i64.const 0) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111))
319 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111))
320
321 (invoke "init" (i64.const 0x1111111111111111))
322 (assert_return (invoke "i32.atomic.rmw8.cmpxchg_u" (i32.const 0) (i32.const 0) (i32.const 0xcdcdcdcd)) (i32.const 0x11))
323 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111))
324
325 (invoke "init" (i64.const 0x1111111111111111))
326 (assert_return (invoke "i32.atomic.rmw16.cmpxchg_u" (i32.const 0) (i32.const 0) (i32.const 0xcafecafe)) (i32.const 0x1111))
327 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111))
328
329 (invoke "init" (i64.const 0x1111111111111111))
330 (assert_return (invoke "i64.atomic.rmw8.cmpxchg_u" (i32.const 0) (i64.const 0) (i64.const 0x4242424242424242)) (i64.const 0x11))
331 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111))
332
333 (invoke "init" (i64.const 0x1111111111111111))
334 (assert_return (invoke "i64.atomic.rmw16.cmpxchg_u" (i32.const 0) (i64.const 0) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111))
335 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111))
336
337 (invoke "init" (i64.const 0x1111111111111111))
338 (assert_return (invoke "i64.atomic.rmw32.cmpxchg_u" (i32.const 0) (i64.const 0) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111))
339 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111111))
340
341 ;; *.atomic.rmw*.cmpxchg (compare true)
342
343 (invoke "init" (i64.const 0x1111111111111111))
344 (assert_return (invoke "i32.atomic.rmw.cmpxchg" (i32.const 0) (i32.const 0x11111111) (i32.const 0x12345678)) (i32.const 0x11111111))
345 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111112345678))
346
347 (invoke "init" (i64.const 0x1111111111111111))
348 (assert_return (invoke "i64.atomic.rmw.cmpxchg" (i32.const 0) (i64.const 0x1111111111111111) (i64.const 0x0101010102020202)) (i64.const 0x1111111111111111))
349 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x0101010102020202))
350
351 (invoke "init" (i64.const 0x1111111111111111))
352 (assert_return (invoke "i32.atomic.rmw8.cmpxchg_u" (i32.const 0) (i32.const 0x11) (i32.const 0xcdcdcdcd)) (i32.const 0x11))
353 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111111111cd))
354
355 (invoke "init" (i64.const 0x1111111111111111))
356 (assert_return (invoke "i32.atomic.rmw16.cmpxchg_u" (i32.const 0) (i32.const 0x1111) (i32.const 0xcafecafe)) (i32.const 0x1111))
357 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111cafe))
358
359 (invoke "init" (i64.const 0x1111111111111111))
360 (assert_return (invoke "i64.atomic.rmw8.cmpxchg_u" (i32.const 0) (i64.const 0x11) (i64.const 0x4242424242424242)) (i64.const 0x11))
361 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x1111111111111142))
362
363 (invoke "init" (i64.const 0x1111111111111111))
364 (assert_return (invoke "i64.atomic.rmw16.cmpxchg_u" (i32.const 0) (i64.const 0x1111) (i64.const 0xbeefbeefbeefbeef)) (i64.const 0x1111))
365 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x111111111111beef))
366
367 (invoke "init" (i64.const 0x1111111111111111))
368 (assert_return (invoke "i64.atomic.rmw32.cmpxchg_u" (i32.const 0) (i64.const 0x11111111) (i64.const 0xcabba6e5cabba6e5)) (i64.const 0x11111111))
369 (assert_return (invoke "i64.atomic.load" (i32.const 0)) (i64.const 0x11111111cabba6e5))
370
371
372 ;; unaligned accesses
373
374 (assert_trap (invoke "i32.atomic.load" (i32.const 1)) "unaligned atomic")
375 (assert_trap (invoke "i64.atomic.load" (i32.const 1)) "unaligned atomic")
376 (assert_trap (invoke "i32.atomic.load16_u" (i32.const 1)) "unaligned atomic")
377 (assert_trap (invoke "i64.atomic.load16_u" (i32.const 1)) "unaligned atomic")
378 (assert_trap (invoke "i64.atomic.load32_u" (i32.const 1)) "unaligned atomic")
379 (assert_trap (invoke "i32.atomic.store" (i32.const 1) (i32.const 0)) "unaligned atomic")
380 (assert_trap (invoke "i64.atomic.store" (i32.const 1) (i64.const 0)) "unaligned atomic")
381 (assert_trap (invoke "i32.atomic.store16" (i32.const 1) (i32.const 0)) "unaligned atomic")
382 (assert_trap (invoke "i64.atomic.store16" (i32.const 1) (i64.const 0)) "unaligned atomic")
383 (assert_trap (invoke "i64.atomic.store32" (i32.const 1) (i64.const 0)) "unaligned atomic")
384 (assert_trap (invoke "i32.atomic.rmw.add" (i32.const 1) (i32.const 0)) "unaligned atomic")
385 (assert_trap (invoke "i64.atomic.rmw.add" (i32.const 1) (i64.const 0)) "unaligned atomic")
386 (assert_trap (invoke "i32.atomic.rmw16.add_u" (i32.const 1) (i32.const 0)) "unaligned atomic")
387 (assert_trap (invoke "i64.atomic.rmw16.add_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
388 (assert_trap (invoke "i64.atomic.rmw32.add_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
389 (assert_trap (invoke "i32.atomic.rmw.sub" (i32.const 1) (i32.const 0)) "unaligned atomic")
390 (assert_trap (invoke "i64.atomic.rmw.sub" (i32.const 1) (i64.const 0)) "unaligned atomic")
391 (assert_trap (invoke "i32.atomic.rmw16.sub_u" (i32.const 1) (i32.const 0)) "unaligned atomic")
392 (assert_trap (invoke "i64.atomic.rmw16.sub_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
393 (assert_trap (invoke "i64.atomic.rmw32.sub_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
394 (assert_trap (invoke "i32.atomic.rmw.and" (i32.const 1) (i32.const 0)) "unaligned atomic")
395 (assert_trap (invoke "i64.atomic.rmw.and" (i32.const 1) (i64.const 0)) "unaligned atomic")
396 (assert_trap (invoke "i32.atomic.rmw16.and_u" (i32.const 1) (i32.const 0)) "unaligned atomic")
397 (assert_trap (invoke "i64.atomic.rmw16.and_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
398 (assert_trap (invoke "i64.atomic.rmw32.and_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
399 (assert_trap (invoke "i32.atomic.rmw.or" (i32.const 1) (i32.const 0)) "unaligned atomic")
400 (assert_trap (invoke "i64.atomic.rmw.or" (i32.const 1) (i64.const 0)) "unaligned atomic")
401 (assert_trap (invoke "i32.atomic.rmw16.or_u" (i32.const 1) (i32.const 0)) "unaligned atomic")
402 (assert_trap (invoke "i64.atomic.rmw16.or_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
403 (assert_trap (invoke "i64.atomic.rmw32.or_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
404 (assert_trap (invoke "i32.atomic.rmw.xor" (i32.const 1) (i32.const 0)) "unaligned atomic")
405 (assert_trap (invoke "i64.atomic.rmw.xor" (i32.const 1) (i64.const 0)) "unaligned atomic")
406 (assert_trap (invoke "i32.atomic.rmw16.xor_u" (i32.const 1) (i32.const 0)) "unaligned atomic")
407 (assert_trap (invoke "i64.atomic.rmw16.xor_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
408 (assert_trap (invoke "i64.atomic.rmw32.xor_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
409 (assert_trap (invoke "i32.atomic.rmw.xchg" (i32.const 1) (i32.const 0)) "unaligned atomic")
410 (assert_trap (invoke "i64.atomic.rmw.xchg" (i32.const 1) (i64.const 0)) "unaligned atomic")
411 (assert_trap (invoke "i32.atomic.rmw16.xchg_u" (i32.const 1) (i32.const 0)) "unaligned atomic")
412 (assert_trap (invoke "i64.atomic.rmw16.xchg_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
413 (assert_trap (invoke "i64.atomic.rmw32.xchg_u" (i32.const 1) (i64.const 0)) "unaligned atomic")
414 (assert_trap (invoke "i32.atomic.rmw.cmpxchg" (i32.const 1) (i32.const 0) (i32.const 0)) "unaligned atomic")
415 (assert_trap (invoke "i64.atomic.rmw.cmpxchg" (i32.const 1) (i64.const 0)  (i64.const 0)) "unaligned atomic")
416 (assert_trap (invoke "i32.atomic.rmw16.cmpxchg_u" (i32.const 1) (i32.const 0) (i32.const 0)) "unaligned atomic")
417 (assert_trap (invoke "i64.atomic.rmw16.cmpxchg_u" (i32.const 1) (i64.const 0) (i64.const 0)) "unaligned atomic")
418 (assert_trap (invoke "i64.atomic.rmw32.cmpxchg_u" (i32.const 1) (i64.const 0) (i64.const 0)) "unaligned atomic")
419
420 (module
421   (memory 1 1 shared)
422
423   (func (export "init") (param $value i64) (i64.store (i32.const 0) (local.get $value)))
424
425   (func (export "memory.atomic.notify") (param $addr i32) (param $count i32) (result i32)
426       (memory.atomic.notify (local.get 0) (local.get 1)))
427   (func (export "memory.atomic.wait32") (param $addr i32) (param $expected i32) (param $timeout i64) (result i32)
428       (memory.atomic.wait32 (local.get 0) (local.get 1) (local.get 2)))
429   (func (export "memory.atomic.wait64") (param $addr i32) (param $expected i64) (param $timeout i64) (result i32)
430       (memory.atomic.wait64 (local.get 0) (local.get 1) (local.get 2)))
431 )
432
433 (invoke "init" (i64.const 0xffffffffffff))
434 (assert_return (invoke "memory.atomic.wait32" (i32.const 0) (i32.const 0) (i64.const 0)) (i32.const 1))
435 (assert_return (invoke "memory.atomic.wait64" (i32.const 0) (i64.const 0) (i64.const 0)) (i32.const 1))
436 (assert_return (invoke "memory.atomic.notify" (i32.const 0) (i32.const 0)) (i32.const 0))
437
438 ;; unshared memory is OK
439 (module
440   (memory 1 1)
441   (func (drop (memory.atomic.notify (i32.const 0) (i32.const 0))))
442   (func (drop (memory.atomic.wait32 (i32.const 0) (i32.const 0) (i64.const 0))))
443   (func (drop (memory.atomic.wait64 (i32.const 0) (i64.const 0) (i64.const 0))))
444   (func (drop (i32.atomic.load (i32.const 0))))
445   (func (drop (i64.atomic.load (i32.const 0))))
446   (func (drop (i32.atomic.load16_u (i32.const 0))))
447   (func (drop (i64.atomic.load16_u (i32.const 0))))
448   (func (drop (i64.atomic.load32_u (i32.const 0))))
449   (func       (i32.atomic.store (i32.const 0) (i32.const 0)))
450   (func       (i64.atomic.store (i32.const 0) (i64.const 0)))
451   (func       (i32.atomic.store16 (i32.const 0) (i32.const 0)))
452   (func       (i64.atomic.store16 (i32.const 0) (i64.const 0)))
453   (func       (i64.atomic.store32 (i32.const 0) (i64.const 0)))
454   (func (drop (i32.atomic.rmw.add (i32.const 0) (i32.const 0))))
455   (func (drop (i64.atomic.rmw.add (i32.const 0) (i64.const 0))))
456   (func (drop (i32.atomic.rmw16.add_u (i32.const 0) (i32.const 0))))
457   (func (drop (i64.atomic.rmw16.add_u (i32.const 0) (i64.const 0))))
458   (func (drop (i64.atomic.rmw32.add_u (i32.const 0) (i64.const 0))))
459   (func (drop (i32.atomic.rmw.sub (i32.const 0) (i32.const 0))))
460   (func (drop (i64.atomic.rmw.sub (i32.const 0) (i64.const 0))))
461   (func (drop (i32.atomic.rmw16.sub_u (i32.const 0) (i32.const 0))))
462   (func (drop (i64.atomic.rmw16.sub_u (i32.const 0) (i64.const 0))))
463   (func (drop (i64.atomic.rmw32.sub_u (i32.const 0) (i64.const 0))))
464   (func (drop (i32.atomic.rmw.and (i32.const 0) (i32.const 0))))
465   (func (drop (i64.atomic.rmw.and (i32.const 0) (i64.const 0))))
466   (func (drop (i32.atomic.rmw16.and_u (i32.const 0) (i32.const 0))))
467   (func (drop (i64.atomic.rmw16.and_u (i32.const 0) (i64.const 0))))
468   (func (drop (i64.atomic.rmw32.and_u (i32.const 0) (i64.const 0))))
469   (func (drop (i32.atomic.rmw.or (i32.const 0) (i32.const 0))))
470   (func (drop (i64.atomic.rmw.or (i32.const 0) (i64.const 0))))
471   (func (drop (i32.atomic.rmw16.or_u (i32.const 0) (i32.const 0))))
472   (func (drop (i64.atomic.rmw16.or_u (i32.const 0) (i64.const 0))))
473   (func (drop (i64.atomic.rmw32.or_u (i32.const 0) (i64.const 0))))
474   (func (drop (i32.atomic.rmw.xor (i32.const 0) (i32.const 0))))
475   (func (drop (i64.atomic.rmw.xor (i32.const 0) (i64.const 0))))
476   (func (drop (i32.atomic.rmw16.xor_u (i32.const 0) (i32.const 0))))
477   (func (drop (i64.atomic.rmw16.xor_u (i32.const 0) (i64.const 0))))
478   (func (drop (i64.atomic.rmw32.xor_u (i32.const 0) (i64.const 0))))
479   (func (drop (i32.atomic.rmw.xchg (i32.const 0) (i32.const 0))))
480   (func (drop (i64.atomic.rmw.xchg (i32.const 0) (i64.const 0))))
481   (func (drop (i32.atomic.rmw16.xchg_u (i32.const 0) (i32.const 0))))
482   (func (drop (i64.atomic.rmw16.xchg_u (i32.const 0) (i64.const 0))))
483   (func (drop (i64.atomic.rmw32.xchg_u (i32.const 0) (i64.const 0))))
484   (func (drop (i32.atomic.rmw.cmpxchg (i32.const 0) (i32.const 0) (i32.const 0))))
485   (func (drop (i64.atomic.rmw.cmpxchg (i32.const 0) (i64.const 0)  (i64.const 0))))
486   (func (drop (i32.atomic.rmw16.cmpxchg_u (i32.const 0) (i32.const 0) (i32.const 0))))
487   (func (drop (i64.atomic.rmw16.cmpxchg_u (i32.const 0) (i64.const 0) (i64.const 0))))
488   (func (drop (i64.atomic.rmw32.cmpxchg_u (i32.const 0) (i64.const 0) (i64.const 0))))
489 )
490
491 ;; Fails with no memory
492 (assert_invalid (module (func (drop (memory.atomic.notify (i32.const 0) (i32.const 0))))) "unknown memory")
493 (assert_invalid (module (func (drop (memory.atomic.wait32 (i32.const 0) (i32.const 0) (i64.const 0))))) "unknown memory")
494 (assert_invalid (module (func (drop (memory.atomic.wait64 (i32.const 0) (i64.const 0) (i64.const 0))))) "unknown memory")
495 (assert_invalid (module (func (drop (i32.atomic.load (i32.const 0))))) "unknown memory")
496 (assert_invalid (module (func (drop (i64.atomic.load (i32.const 0))))) "unknown memory")
497 (assert_invalid (module (func (drop (i32.atomic.load16_u (i32.const 0))))) "unknown memory")
498 (assert_invalid (module (func (drop (i64.atomic.load16_u (i32.const 0))))) "unknown memory")
499 (assert_invalid (module (func (drop (i64.atomic.load32_u (i32.const 0))))) "unknown memory")
500 (assert_invalid (module (func       (i32.atomic.store (i32.const 0) (i32.const 0)))) "unknown memory")
501 (assert_invalid (module (func       (i64.atomic.store (i32.const 0) (i64.const 0)))) "unknown memory")
502 (assert_invalid (module (func       (i32.atomic.store16 (i32.const 0) (i32.const 0)))) "unknown memory")
503 (assert_invalid (module (func       (i64.atomic.store16 (i32.const 0) (i64.const 0)))) "unknown memory")
504 (assert_invalid (module (func       (i64.atomic.store32 (i32.const 0) (i64.const 0)))) "unknown memory")
505 (assert_invalid (module (func (drop (i32.atomic.rmw.add (i32.const 0) (i32.const 0))))) "unknown memory")
506 (assert_invalid (module (func (drop (i64.atomic.rmw.add (i32.const 0) (i64.const 0))))) "unknown memory")
507 (assert_invalid (module (func (drop (i32.atomic.rmw16.add_u (i32.const 0) (i32.const 0))))) "unknown memory")
508 (assert_invalid (module (func (drop (i64.atomic.rmw16.add_u (i32.const 0) (i64.const 0))))) "unknown memory")
509 (assert_invalid (module (func (drop (i64.atomic.rmw32.add_u (i32.const 0) (i64.const 0))))) "unknown memory")
510 (assert_invalid (module (func (drop (i32.atomic.rmw.sub (i32.const 0) (i32.const 0))))) "unknown memory")
511 (assert_invalid (module (func (drop (i64.atomic.rmw.sub (i32.const 0) (i64.const 0))))) "unknown memory")
512 (assert_invalid (module (func (drop (i32.atomic.rmw16.sub_u (i32.const 0) (i32.const 0))))) "unknown memory")
513 (assert_invalid (module (func (drop (i64.atomic.rmw16.sub_u (i32.const 0) (i64.const 0))))) "unknown memory")
514 (assert_invalid (module (func (drop (i64.atomic.rmw32.sub_u (i32.const 0) (i64.const 0))))) "unknown memory")
515 (assert_invalid (module (func (drop (i32.atomic.rmw.and (i32.const 0) (i32.const 0))))) "unknown memory")
516 (assert_invalid (module (func (drop (i64.atomic.rmw.and (i32.const 0) (i64.const 0))))) "unknown memory")
517 (assert_invalid (module (func (drop (i32.atomic.rmw16.and_u (i32.const 0) (i32.const 0))))) "unknown memory")
518 (assert_invalid (module (func (drop (i64.atomic.rmw16.and_u (i32.const 0) (i64.const 0))))) "unknown memory")
519 (assert_invalid (module (func (drop (i64.atomic.rmw32.and_u (i32.const 0) (i64.const 0))))) "unknown memory")
520 (assert_invalid (module (func (drop (i32.atomic.rmw.or (i32.const 0) (i32.const 0))))) "unknown memory")
521 (assert_invalid (module (func (drop (i64.atomic.rmw.or (i32.const 0) (i64.const 0))))) "unknown memory")
522 (assert_invalid (module (func (drop (i32.atomic.rmw16.or_u (i32.const 0) (i32.const 0))))) "unknown memory")
523 (assert_invalid (module (func (drop (i64.atomic.rmw16.or_u (i32.const 0) (i64.const 0))))) "unknown memory")
524 (assert_invalid (module (func (drop (i64.atomic.rmw32.or_u (i32.const 0) (i64.const 0))))) "unknown memory")
525 (assert_invalid (module (func (drop (i32.atomic.rmw.xor (i32.const 0) (i32.const 0))))) "unknown memory")
526 (assert_invalid (module (func (drop (i64.atomic.rmw.xor (i32.const 0) (i64.const 0))))) "unknown memory")
527 (assert_invalid (module (func (drop (i32.atomic.rmw16.xor_u (i32.const 0) (i32.const 0))))) "unknown memory")
528 (assert_invalid (module (func (drop (i64.atomic.rmw16.xor_u (i32.const 0) (i64.const 0))))) "unknown memory")
529 (assert_invalid (module (func (drop (i64.atomic.rmw32.xor_u (i32.const 0) (i64.const 0))))) "unknown memory")
530 (assert_invalid (module (func (drop (i32.atomic.rmw.xchg (i32.const 0) (i32.const 0))))) "unknown memory")
531 (assert_invalid (module (func (drop (i64.atomic.rmw.xchg (i32.const 0) (i64.const 0))))) "unknown memory")
532 (assert_invalid (module (func (drop (i32.atomic.rmw16.xchg_u (i32.const 0) (i32.const 0))))) "unknown memory")
533 (assert_invalid (module (func (drop (i64.atomic.rmw16.xchg_u (i32.const 0) (i64.const 0))))) "unknown memory")
534 (assert_invalid (module (func (drop (i64.atomic.rmw32.xchg_u (i32.const 0) (i64.const 0))))) "unknown memory")
535 (assert_invalid (module (func (drop (i32.atomic.rmw.cmpxchg (i32.const 0) (i32.const 0) (i32.const 0))))) "unknown memory")
536 (assert_invalid (module (func (drop (i64.atomic.rmw.cmpxchg (i32.const 0) (i64.const 0)  (i64.const 0))))) "unknown memory")
537 (assert_invalid (module (func (drop (i32.atomic.rmw16.cmpxchg_u (i32.const 0) (i32.const 0) (i32.const 0))))) "unknown memory")
538 (assert_invalid (module (func (drop (i64.atomic.rmw16.cmpxchg_u (i32.const 0) (i64.const 0) (i64.const 0))))) "unknown memory")
539 (assert_invalid (module (func (drop (i64.atomic.rmw32.cmpxchg_u (i32.const 0) (i64.const 0) (i64.const 0))))) "unknown memory")