...
1;; Tests for store lane operations.
2
3
4(module
5 (memory 1)
6 (global $zero (mut v128) (v128.const i32x4 0 0 0 0))
7 (func (export "v128.store16_lane_0")
8 (param $address i32) (param $x v128) (result i64) (local $ret i64)
9 (v128.store16_lane 0 (local.get $address) (local.get $x))
10 (local.set $ret (i64.load (local.get $address)))
11 (v128.store (local.get $address) (global.get $zero)) (local.get $ret))
12 (func (export "v128.store16_lane_1")
13 (param $address i32) (param $x v128) (result i64) (local $ret i64)
14 (v128.store16_lane 1 (local.get $address) (local.get $x))
15 (local.set $ret (i64.load (local.get $address)))
16 (v128.store (local.get $address) (global.get $zero)) (local.get $ret))
17 (func (export "v128.store16_lane_2")
18 (param $address i32) (param $x v128) (result i64) (local $ret i64)
19 (v128.store16_lane 2 (local.get $address) (local.get $x))
20 (local.set $ret (i64.load (local.get $address)))
21 (v128.store (local.get $address) (global.get $zero)) (local.get $ret))
22 (func (export "v128.store16_lane_3")
23 (param $address i32) (param $x v128) (result i64) (local $ret i64)
24 (v128.store16_lane 3 (local.get $address) (local.get $x))
25 (local.set $ret (i64.load (local.get $address)))
26 (v128.store (local.get $address) (global.get $zero)) (local.get $ret))
27 (func (export "v128.store16_lane_4")
28 (param $address i32) (param $x v128) (result i64) (local $ret i64)
29 (v128.store16_lane 4 (local.get $address) (local.get $x))
30 (local.set $ret (i64.load (local.get $address)))
31 (v128.store (local.get $address) (global.get $zero)) (local.get $ret))
32 (func (export "v128.store16_lane_5")
33 (param $address i32) (param $x v128) (result i64) (local $ret i64)
34 (v128.store16_lane 5 (local.get $address) (local.get $x))
35 (local.set $ret (i64.load (local.get $address)))
36 (v128.store (local.get $address) (global.get $zero)) (local.get $ret))
37 (func (export "v128.store16_lane_6")
38 (param $address i32) (param $x v128) (result i64) (local $ret i64)
39 (v128.store16_lane 6 (local.get $address) (local.get $x))
40 (local.set $ret (i64.load (local.get $address)))
41 (v128.store (local.get $address) (global.get $zero)) (local.get $ret))
42 (func (export "v128.store16_lane_7")
43 (param $address i32) (param $x v128) (result i64) (local $ret i64)
44 (v128.store16_lane 7 (local.get $address) (local.get $x))
45 (local.set $ret (i64.load (local.get $address)))
46 (v128.store (local.get $address) (global.get $zero)) (local.get $ret))
47 (func (export "v128.store16_lane_0_offset_0")
48 (param $x v128) (result i64) (local $ret i64)
49 (v128.store16_lane offset=0 0 (i32.const 0) (local.get $x))
50 (local.set $ret (i64.load offset=0 (i32.const 0)))
51 (v128.store offset=0 (i32.const 0) (global.get $zero))
52 (local.get $ret))
53 (func (export "v128.store16_lane_1_offset_1")
54 (param $x v128) (result i64) (local $ret i64)
55 (v128.store16_lane offset=1 1 (i32.const 0) (local.get $x))
56 (local.set $ret (i64.load offset=1 (i32.const 0)))
57 (v128.store offset=1 (i32.const 0) (global.get $zero))
58 (local.get $ret))
59 (func (export "v128.store16_lane_2_offset_2")
60 (param $x v128) (result i64) (local $ret i64)
61 (v128.store16_lane offset=2 2 (i32.const 0) (local.get $x))
62 (local.set $ret (i64.load offset=2 (i32.const 0)))
63 (v128.store offset=2 (i32.const 0) (global.get $zero))
64 (local.get $ret))
65 (func (export "v128.store16_lane_3_offset_3")
66 (param $x v128) (result i64) (local $ret i64)
67 (v128.store16_lane offset=3 3 (i32.const 0) (local.get $x))
68 (local.set $ret (i64.load offset=3 (i32.const 0)))
69 (v128.store offset=3 (i32.const 0) (global.get $zero))
70 (local.get $ret))
71 (func (export "v128.store16_lane_4_offset_4")
72 (param $x v128) (result i64) (local $ret i64)
73 (v128.store16_lane offset=4 4 (i32.const 0) (local.get $x))
74 (local.set $ret (i64.load offset=4 (i32.const 0)))
75 (v128.store offset=4 (i32.const 0) (global.get $zero))
76 (local.get $ret))
77 (func (export "v128.store16_lane_5_offset_5")
78 (param $x v128) (result i64) (local $ret i64)
79 (v128.store16_lane offset=5 5 (i32.const 0) (local.get $x))
80 (local.set $ret (i64.load offset=5 (i32.const 0)))
81 (v128.store offset=5 (i32.const 0) (global.get $zero))
82 (local.get $ret))
83 (func (export "v128.store16_lane_6_offset_6")
84 (param $x v128) (result i64) (local $ret i64)
85 (v128.store16_lane offset=6 6 (i32.const 0) (local.get $x))
86 (local.set $ret (i64.load offset=6 (i32.const 0)))
87 (v128.store offset=6 (i32.const 0) (global.get $zero))
88 (local.get $ret))
89 (func (export "v128.store16_lane_7_offset_7")
90 (param $x v128) (result i64) (local $ret i64)
91 (v128.store16_lane offset=7 7 (i32.const 0) (local.get $x))
92 (local.set $ret (i64.load offset=7 (i32.const 0)))
93 (v128.store offset=7 (i32.const 0) (global.get $zero))
94 (local.get $ret))
95 (func (export "v128.store16_lane_0_align_1")
96 (param $address i32) (param $x v128) (result i64) (local $ret i64)
97 (v128.store16_lane align=1 0 (local.get $address) (local.get $x))
98 (local.set $ret (i64.load (local.get $address)))
99 (v128.store offset=0 (i32.const 0) (global.get $zero))
100 (local.get $ret))
101 (func (export "v128.store16_lane_0_align_2")
102 (param $address i32) (param $x v128) (result i64) (local $ret i64)
103 (v128.store16_lane align=2 0 (local.get $address) (local.get $x))
104 (local.set $ret (i64.load (local.get $address)))
105 (v128.store offset=0 (i32.const 0) (global.get $zero))
106 (local.get $ret))
107 (func (export "v128.store16_lane_1_align_1")
108 (param $address i32) (param $x v128) (result i64) (local $ret i64)
109 (v128.store16_lane align=1 1 (local.get $address) (local.get $x))
110 (local.set $ret (i64.load (local.get $address)))
111 (v128.store offset=1 (i32.const 0) (global.get $zero))
112 (local.get $ret))
113 (func (export "v128.store16_lane_1_align_2")
114 (param $address i32) (param $x v128) (result i64) (local $ret i64)
115 (v128.store16_lane align=2 1 (local.get $address) (local.get $x))
116 (local.set $ret (i64.load (local.get $address)))
117 (v128.store offset=1 (i32.const 0) (global.get $zero))
118 (local.get $ret))
119 (func (export "v128.store16_lane_2_align_1")
120 (param $address i32) (param $x v128) (result i64) (local $ret i64)
121 (v128.store16_lane align=1 2 (local.get $address) (local.get $x))
122 (local.set $ret (i64.load (local.get $address)))
123 (v128.store offset=2 (i32.const 0) (global.get $zero))
124 (local.get $ret))
125 (func (export "v128.store16_lane_2_align_2")
126 (param $address i32) (param $x v128) (result i64) (local $ret i64)
127 (v128.store16_lane align=2 2 (local.get $address) (local.get $x))
128 (local.set $ret (i64.load (local.get $address)))
129 (v128.store offset=2 (i32.const 0) (global.get $zero))
130 (local.get $ret))
131 (func (export "v128.store16_lane_3_align_1")
132 (param $address i32) (param $x v128) (result i64) (local $ret i64)
133 (v128.store16_lane align=1 3 (local.get $address) (local.get $x))
134 (local.set $ret (i64.load (local.get $address)))
135 (v128.store offset=3 (i32.const 0) (global.get $zero))
136 (local.get $ret))
137 (func (export "v128.store16_lane_3_align_2")
138 (param $address i32) (param $x v128) (result i64) (local $ret i64)
139 (v128.store16_lane align=2 3 (local.get $address) (local.get $x))
140 (local.set $ret (i64.load (local.get $address)))
141 (v128.store offset=3 (i32.const 0) (global.get $zero))
142 (local.get $ret))
143 (func (export "v128.store16_lane_4_align_1")
144 (param $address i32) (param $x v128) (result i64) (local $ret i64)
145 (v128.store16_lane align=1 4 (local.get $address) (local.get $x))
146 (local.set $ret (i64.load (local.get $address)))
147 (v128.store offset=4 (i32.const 0) (global.get $zero))
148 (local.get $ret))
149 (func (export "v128.store16_lane_4_align_2")
150 (param $address i32) (param $x v128) (result i64) (local $ret i64)
151 (v128.store16_lane align=2 4 (local.get $address) (local.get $x))
152 (local.set $ret (i64.load (local.get $address)))
153 (v128.store offset=4 (i32.const 0) (global.get $zero))
154 (local.get $ret))
155 (func (export "v128.store16_lane_5_align_1")
156 (param $address i32) (param $x v128) (result i64) (local $ret i64)
157 (v128.store16_lane align=1 5 (local.get $address) (local.get $x))
158 (local.set $ret (i64.load (local.get $address)))
159 (v128.store offset=5 (i32.const 0) (global.get $zero))
160 (local.get $ret))
161 (func (export "v128.store16_lane_5_align_2")
162 (param $address i32) (param $x v128) (result i64) (local $ret i64)
163 (v128.store16_lane align=2 5 (local.get $address) (local.get $x))
164 (local.set $ret (i64.load (local.get $address)))
165 (v128.store offset=5 (i32.const 0) (global.get $zero))
166 (local.get $ret))
167 (func (export "v128.store16_lane_6_align_1")
168 (param $address i32) (param $x v128) (result i64) (local $ret i64)
169 (v128.store16_lane align=1 6 (local.get $address) (local.get $x))
170 (local.set $ret (i64.load (local.get $address)))
171 (v128.store offset=6 (i32.const 0) (global.get $zero))
172 (local.get $ret))
173 (func (export "v128.store16_lane_6_align_2")
174 (param $address i32) (param $x v128) (result i64) (local $ret i64)
175 (v128.store16_lane align=2 6 (local.get $address) (local.get $x))
176 (local.set $ret (i64.load (local.get $address)))
177 (v128.store offset=6 (i32.const 0) (global.get $zero))
178 (local.get $ret))
179 (func (export "v128.store16_lane_7_align_1")
180 (param $address i32) (param $x v128) (result i64) (local $ret i64)
181 (v128.store16_lane align=1 7 (local.get $address) (local.get $x))
182 (local.set $ret (i64.load (local.get $address)))
183 (v128.store offset=7 (i32.const 0) (global.get $zero))
184 (local.get $ret))
185 (func (export "v128.store16_lane_7_align_2")
186 (param $address i32) (param $x v128) (result i64) (local $ret i64)
187 (v128.store16_lane align=2 7 (local.get $address) (local.get $x))
188 (local.set $ret (i64.load (local.get $address)))
189 (v128.store offset=7 (i32.const 0) (global.get $zero))
190 (local.get $ret))
191)
192
193(assert_return (invoke "v128.store16_lane_0" (i32.const 0)
194 (v128.const i16x8 256 0 0 0 0 0 0 0))
195 (i64.const 256))
196(assert_return (invoke "v128.store16_lane_1" (i32.const 1)
197 (v128.const i16x8 0 513 0 0 0 0 0 0))
198 (i64.const 513))
199(assert_return (invoke "v128.store16_lane_2" (i32.const 2)
200 (v128.const i16x8 0 0 770 0 0 0 0 0))
201 (i64.const 770))
202(assert_return (invoke "v128.store16_lane_3" (i32.const 3)
203 (v128.const i16x8 0 0 0 1027 0 0 0 0))
204 (i64.const 1027))
205(assert_return (invoke "v128.store16_lane_4" (i32.const 4)
206 (v128.const i16x8 0 0 0 0 1284 0 0 0))
207 (i64.const 1284))
208(assert_return (invoke "v128.store16_lane_5" (i32.const 5)
209 (v128.const i16x8 0 0 0 0 0 1541 0 0))
210 (i64.const 1541))
211(assert_return (invoke "v128.store16_lane_6" (i32.const 6)
212 (v128.const i16x8 0 0 0 0 0 0 1798 0))
213 (i64.const 1798))
214(assert_return (invoke "v128.store16_lane_7" (i32.const 7)
215 (v128.const i16x8 0 0 0 0 0 0 0 2055))
216 (i64.const 2055))
217(assert_return (invoke "v128.store16_lane_0_offset_0" (v128.const i16x8 256 0 0 0 0 0 0 0))
218 (i64.const 256))
219(assert_return (invoke "v128.store16_lane_1_offset_1" (v128.const i16x8 0 513 0 0 0 0 0 0))
220 (i64.const 513))
221(assert_return (invoke "v128.store16_lane_2_offset_2" (v128.const i16x8 0 0 770 0 0 0 0 0))
222 (i64.const 770))
223(assert_return (invoke "v128.store16_lane_3_offset_3" (v128.const i16x8 0 0 0 1027 0 0 0 0))
224 (i64.const 1027))
225(assert_return (invoke "v128.store16_lane_4_offset_4" (v128.const i16x8 0 0 0 0 1284 0 0 0))
226 (i64.const 1284))
227(assert_return (invoke "v128.store16_lane_5_offset_5" (v128.const i16x8 0 0 0 0 0 1541 0 0))
228 (i64.const 1541))
229(assert_return (invoke "v128.store16_lane_6_offset_6" (v128.const i16x8 0 0 0 0 0 0 1798 0))
230 (i64.const 1798))
231(assert_return (invoke "v128.store16_lane_7_offset_7" (v128.const i16x8 0 0 0 0 0 0 0 2055))
232 (i64.const 2055))
233(assert_return (invoke "v128.store16_lane_0_align_1" (i32.const 0)
234 (v128.const i16x8 256 0 0 0 0 0 0 0))
235 (i64.const 256))
236(assert_return (invoke "v128.store16_lane_0_align_2" (i32.const 0)
237 (v128.const i16x8 256 0 0 0 0 0 0 0))
238 (i64.const 256))
239(assert_return (invoke "v128.store16_lane_1_align_1" (i32.const 1)
240 (v128.const i16x8 0 513 0 0 0 0 0 0))
241 (i64.const 513))
242(assert_return (invoke "v128.store16_lane_1_align_2" (i32.const 1)
243 (v128.const i16x8 0 513 0 0 0 0 0 0))
244 (i64.const 513))
245(assert_return (invoke "v128.store16_lane_2_align_1" (i32.const 2)
246 (v128.const i16x8 0 0 770 0 0 0 0 0))
247 (i64.const 770))
248(assert_return (invoke "v128.store16_lane_2_align_2" (i32.const 2)
249 (v128.const i16x8 0 0 770 0 0 0 0 0))
250 (i64.const 770))
251(assert_return (invoke "v128.store16_lane_3_align_1" (i32.const 3)
252 (v128.const i16x8 0 0 0 1027 0 0 0 0))
253 (i64.const 1027))
254(assert_return (invoke "v128.store16_lane_3_align_2" (i32.const 3)
255 (v128.const i16x8 0 0 0 1027 0 0 0 0))
256 (i64.const 1027))
257(assert_return (invoke "v128.store16_lane_4_align_1" (i32.const 4)
258 (v128.const i16x8 0 0 0 0 1284 0 0 0))
259 (i64.const 1284))
260(assert_return (invoke "v128.store16_lane_4_align_2" (i32.const 4)
261 (v128.const i16x8 0 0 0 0 1284 0 0 0))
262 (i64.const 1284))
263(assert_return (invoke "v128.store16_lane_5_align_1" (i32.const 5)
264 (v128.const i16x8 0 0 0 0 0 1541 0 0))
265 (i64.const 1541))
266(assert_return (invoke "v128.store16_lane_5_align_2" (i32.const 5)
267 (v128.const i16x8 0 0 0 0 0 1541 0 0))
268 (i64.const 1541))
269(assert_return (invoke "v128.store16_lane_6_align_1" (i32.const 6)
270 (v128.const i16x8 0 0 0 0 0 0 1798 0))
271 (i64.const 1798))
272(assert_return (invoke "v128.store16_lane_6_align_2" (i32.const 6)
273 (v128.const i16x8 0 0 0 0 0 0 1798 0))
274 (i64.const 1798))
275(assert_return (invoke "v128.store16_lane_7_align_1" (i32.const 7)
276 (v128.const i16x8 0 0 0 0 0 0 0 2055))
277 (i64.const 2055))
278(assert_return (invoke "v128.store16_lane_7_align_2" (i32.const 7)
279 (v128.const i16x8 0 0 0 0 0 0 0 2055))
280 (i64.const 2055))
281
282;; type check
283(assert_invalid (module (memory 1)
284 (func (param $x v128) (result v128)
285 (v128.store16_lane 0 (local.get $x) (i32.const 0))))
286 "type mismatch")
287
288;; invalid lane index
289(assert_invalid (module (memory 1)
290 (func (param $x v128) (result v128)
291 (v128.store16_lane 8 (i32.const 0) (local.get $x))))
292 "invalid lane index")
293
294;; invalid memarg alignment
295(assert_invalid
296 (module (memory 1)
297 (func (param $x v128) (result v128)
298 (v128.store16_lane align=4 0 (i32.const 0) (local.get $x))))
299 "alignment must not be larger than natural")
View as plain text