...
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.store32_lane_0")
8 (param $address i32) (param $x v128) (result i64) (local $ret i64)
9 (v128.store32_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.store32_lane_1")
13 (param $address i32) (param $x v128) (result i64) (local $ret i64)
14 (v128.store32_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.store32_lane_2")
18 (param $address i32) (param $x v128) (result i64) (local $ret i64)
19 (v128.store32_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.store32_lane_3")
23 (param $address i32) (param $x v128) (result i64) (local $ret i64)
24 (v128.store32_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.store32_lane_0_offset_0")
28 (param $x v128) (result i64) (local $ret i64)
29 (v128.store32_lane offset=0 0 (i32.const 0) (local.get $x))
30 (local.set $ret (i64.load offset=0 (i32.const 0)))
31 (v128.store offset=0 (i32.const 0) (global.get $zero))
32 (local.get $ret))
33 (func (export "v128.store32_lane_1_offset_1")
34 (param $x v128) (result i64) (local $ret i64)
35 (v128.store32_lane offset=1 1 (i32.const 0) (local.get $x))
36 (local.set $ret (i64.load offset=1 (i32.const 0)))
37 (v128.store offset=1 (i32.const 0) (global.get $zero))
38 (local.get $ret))
39 (func (export "v128.store32_lane_2_offset_2")
40 (param $x v128) (result i64) (local $ret i64)
41 (v128.store32_lane offset=2 2 (i32.const 0) (local.get $x))
42 (local.set $ret (i64.load offset=2 (i32.const 0)))
43 (v128.store offset=2 (i32.const 0) (global.get $zero))
44 (local.get $ret))
45 (func (export "v128.store32_lane_3_offset_3")
46 (param $x v128) (result i64) (local $ret i64)
47 (v128.store32_lane offset=3 3 (i32.const 0) (local.get $x))
48 (local.set $ret (i64.load offset=3 (i32.const 0)))
49 (v128.store offset=3 (i32.const 0) (global.get $zero))
50 (local.get $ret))
51 (func (export "v128.store32_lane_0_align_1")
52 (param $address i32) (param $x v128) (result i64) (local $ret i64)
53 (v128.store32_lane align=1 0 (local.get $address) (local.get $x))
54 (local.set $ret (i64.load (local.get $address)))
55 (v128.store offset=0 (i32.const 0) (global.get $zero))
56 (local.get $ret))
57 (func (export "v128.store32_lane_0_align_2")
58 (param $address i32) (param $x v128) (result i64) (local $ret i64)
59 (v128.store32_lane align=2 0 (local.get $address) (local.get $x))
60 (local.set $ret (i64.load (local.get $address)))
61 (v128.store offset=0 (i32.const 0) (global.get $zero))
62 (local.get $ret))
63 (func (export "v128.store32_lane_0_align_4")
64 (param $address i32) (param $x v128) (result i64) (local $ret i64)
65 (v128.store32_lane align=4 0 (local.get $address) (local.get $x))
66 (local.set $ret (i64.load (local.get $address)))
67 (v128.store offset=0 (i32.const 0) (global.get $zero))
68 (local.get $ret))
69 (func (export "v128.store32_lane_1_align_1")
70 (param $address i32) (param $x v128) (result i64) (local $ret i64)
71 (v128.store32_lane align=1 1 (local.get $address) (local.get $x))
72 (local.set $ret (i64.load (local.get $address)))
73 (v128.store offset=1 (i32.const 0) (global.get $zero))
74 (local.get $ret))
75 (func (export "v128.store32_lane_1_align_2")
76 (param $address i32) (param $x v128) (result i64) (local $ret i64)
77 (v128.store32_lane align=2 1 (local.get $address) (local.get $x))
78 (local.set $ret (i64.load (local.get $address)))
79 (v128.store offset=1 (i32.const 0) (global.get $zero))
80 (local.get $ret))
81 (func (export "v128.store32_lane_1_align_4")
82 (param $address i32) (param $x v128) (result i64) (local $ret i64)
83 (v128.store32_lane align=4 1 (local.get $address) (local.get $x))
84 (local.set $ret (i64.load (local.get $address)))
85 (v128.store offset=1 (i32.const 0) (global.get $zero))
86 (local.get $ret))
87 (func (export "v128.store32_lane_2_align_1")
88 (param $address i32) (param $x v128) (result i64) (local $ret i64)
89 (v128.store32_lane align=1 2 (local.get $address) (local.get $x))
90 (local.set $ret (i64.load (local.get $address)))
91 (v128.store offset=2 (i32.const 0) (global.get $zero))
92 (local.get $ret))
93 (func (export "v128.store32_lane_2_align_2")
94 (param $address i32) (param $x v128) (result i64) (local $ret i64)
95 (v128.store32_lane align=2 2 (local.get $address) (local.get $x))
96 (local.set $ret (i64.load (local.get $address)))
97 (v128.store offset=2 (i32.const 0) (global.get $zero))
98 (local.get $ret))
99 (func (export "v128.store32_lane_2_align_4")
100 (param $address i32) (param $x v128) (result i64) (local $ret i64)
101 (v128.store32_lane align=4 2 (local.get $address) (local.get $x))
102 (local.set $ret (i64.load (local.get $address)))
103 (v128.store offset=2 (i32.const 0) (global.get $zero))
104 (local.get $ret))
105 (func (export "v128.store32_lane_3_align_1")
106 (param $address i32) (param $x v128) (result i64) (local $ret i64)
107 (v128.store32_lane align=1 3 (local.get $address) (local.get $x))
108 (local.set $ret (i64.load (local.get $address)))
109 (v128.store offset=3 (i32.const 0) (global.get $zero))
110 (local.get $ret))
111 (func (export "v128.store32_lane_3_align_2")
112 (param $address i32) (param $x v128) (result i64) (local $ret i64)
113 (v128.store32_lane align=2 3 (local.get $address) (local.get $x))
114 (local.set $ret (i64.load (local.get $address)))
115 (v128.store offset=3 (i32.const 0) (global.get $zero))
116 (local.get $ret))
117 (func (export "v128.store32_lane_3_align_4")
118 (param $address i32) (param $x v128) (result i64) (local $ret i64)
119 (v128.store32_lane align=4 3 (local.get $address) (local.get $x))
120 (local.set $ret (i64.load (local.get $address)))
121 (v128.store offset=3 (i32.const 0) (global.get $zero))
122 (local.get $ret))
123)
124
125(assert_return (invoke "v128.store32_lane_0" (i32.const 0)
126 (v128.const i32x4 50462976 0 0 0))
127 (i64.const 50462976))
128(assert_return (invoke "v128.store32_lane_1" (i32.const 1)
129 (v128.const i32x4 0 67305985 0 0))
130 (i64.const 67305985))
131(assert_return (invoke "v128.store32_lane_2" (i32.const 2)
132 (v128.const i32x4 0 0 84148994 0))
133 (i64.const 84148994))
134(assert_return (invoke "v128.store32_lane_3" (i32.const 3)
135 (v128.const i32x4 0 0 0 100992003))
136 (i64.const 100992003))
137(assert_return (invoke "v128.store32_lane_0_offset_0" (v128.const i32x4 50462976 0 0 0))
138 (i64.const 50462976))
139(assert_return (invoke "v128.store32_lane_1_offset_1" (v128.const i32x4 0 67305985 0 0))
140 (i64.const 67305985))
141(assert_return (invoke "v128.store32_lane_2_offset_2" (v128.const i32x4 0 0 84148994 0))
142 (i64.const 84148994))
143(assert_return (invoke "v128.store32_lane_3_offset_3" (v128.const i32x4 0 0 0 100992003))
144 (i64.const 100992003))
145(assert_return (invoke "v128.store32_lane_0_align_1" (i32.const 0)
146 (v128.const i32x4 50462976 0 0 0))
147 (i64.const 50462976))
148(assert_return (invoke "v128.store32_lane_0_align_2" (i32.const 0)
149 (v128.const i32x4 50462976 0 0 0))
150 (i64.const 50462976))
151(assert_return (invoke "v128.store32_lane_0_align_4" (i32.const 0)
152 (v128.const i32x4 50462976 0 0 0))
153 (i64.const 50462976))
154(assert_return (invoke "v128.store32_lane_1_align_1" (i32.const 1)
155 (v128.const i32x4 0 67305985 0 0))
156 (i64.const 67305985))
157(assert_return (invoke "v128.store32_lane_1_align_2" (i32.const 1)
158 (v128.const i32x4 0 67305985 0 0))
159 (i64.const 67305985))
160(assert_return (invoke "v128.store32_lane_1_align_4" (i32.const 1)
161 (v128.const i32x4 0 67305985 0 0))
162 (i64.const 67305985))
163(assert_return (invoke "v128.store32_lane_2_align_1" (i32.const 2)
164 (v128.const i32x4 0 0 84148994 0))
165 (i64.const 84148994))
166(assert_return (invoke "v128.store32_lane_2_align_2" (i32.const 2)
167 (v128.const i32x4 0 0 84148994 0))
168 (i64.const 84148994))
169(assert_return (invoke "v128.store32_lane_2_align_4" (i32.const 2)
170 (v128.const i32x4 0 0 84148994 0))
171 (i64.const 84148994))
172(assert_return (invoke "v128.store32_lane_3_align_1" (i32.const 3)
173 (v128.const i32x4 0 0 0 100992003))
174 (i64.const 100992003))
175(assert_return (invoke "v128.store32_lane_3_align_2" (i32.const 3)
176 (v128.const i32x4 0 0 0 100992003))
177 (i64.const 100992003))
178(assert_return (invoke "v128.store32_lane_3_align_4" (i32.const 3)
179 (v128.const i32x4 0 0 0 100992003))
180 (i64.const 100992003))
181
182;; type check
183(assert_invalid (module (memory 1)
184 (func (param $x v128) (result v128)
185 (v128.store32_lane 0 (local.get $x) (i32.const 0))))
186 "type mismatch")
187
188;; invalid lane index
189(assert_invalid (module (memory 1)
190 (func (param $x v128) (result v128)
191 (v128.store32_lane 4 (i32.const 0) (local.get $x))))
192 "invalid lane index")
193
194;; invalid memarg alignment
195(assert_invalid
196 (module (memory 1)
197 (func (param $x v128) (result v128)
198 (v128.store32_lane align=8 0 (i32.const 0) (local.get $x))))
199 "alignment must not be larger than natural")
View as plain text