...
1;; Tests for load lane operations.
2
3
4(module
5 (memory 1)
6 (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0A\0B\0C\0D\0E\0F")
7 (func (export "v128.load32_lane_0")
8 (param $address i32) (param $x v128) (result v128)
9 (v128.load32_lane 0 (local.get $address) (local.get $x)))
10 (func (export "v128.load32_lane_1")
11 (param $address i32) (param $x v128) (result v128)
12 (v128.load32_lane 1 (local.get $address) (local.get $x)))
13 (func (export "v128.load32_lane_2")
14 (param $address i32) (param $x v128) (result v128)
15 (v128.load32_lane 2 (local.get $address) (local.get $x)))
16 (func (export "v128.load32_lane_3")
17 (param $address i32) (param $x v128) (result v128)
18 (v128.load32_lane 3 (local.get $address) (local.get $x)))
19 (func (export "v128.load32_lane_0_offset_0")
20 (param $x v128) (result v128)
21 (v128.load32_lane offset=0 0 (i32.const 0) (local.get $x)))
22 (func (export "v128.load32_lane_1_offset_1")
23 (param $x v128) (result v128)
24 (v128.load32_lane offset=1 1 (i32.const 0) (local.get $x)))
25 (func (export "v128.load32_lane_2_offset_2")
26 (param $x v128) (result v128)
27 (v128.load32_lane offset=2 2 (i32.const 0) (local.get $x)))
28 (func (export "v128.load32_lane_3_offset_3")
29 (param $x v128) (result v128)
30 (v128.load32_lane offset=3 3 (i32.const 0) (local.get $x)))
31 (func (export "v128.load32_lane_0_align_1")
32 (param $address i32) (param $x v128) (result v128)
33 (v128.load32_lane align=1 0 (local.get $address) (local.get $x)))
34 (func (export "v128.load32_lane_0_align_2")
35 (param $address i32) (param $x v128) (result v128)
36 (v128.load32_lane align=2 0 (local.get $address) (local.get $x)))
37 (func (export "v128.load32_lane_0_align_4")
38 (param $address i32) (param $x v128) (result v128)
39 (v128.load32_lane align=4 0 (local.get $address) (local.get $x)))
40 (func (export "v128.load32_lane_1_align_1")
41 (param $address i32) (param $x v128) (result v128)
42 (v128.load32_lane align=1 1 (local.get $address) (local.get $x)))
43 (func (export "v128.load32_lane_1_align_2")
44 (param $address i32) (param $x v128) (result v128)
45 (v128.load32_lane align=2 1 (local.get $address) (local.get $x)))
46 (func (export "v128.load32_lane_1_align_4")
47 (param $address i32) (param $x v128) (result v128)
48 (v128.load32_lane align=4 1 (local.get $address) (local.get $x)))
49 (func (export "v128.load32_lane_2_align_1")
50 (param $address i32) (param $x v128) (result v128)
51 (v128.load32_lane align=1 2 (local.get $address) (local.get $x)))
52 (func (export "v128.load32_lane_2_align_2")
53 (param $address i32) (param $x v128) (result v128)
54 (v128.load32_lane align=2 2 (local.get $address) (local.get $x)))
55 (func (export "v128.load32_lane_2_align_4")
56 (param $address i32) (param $x v128) (result v128)
57 (v128.load32_lane align=4 2 (local.get $address) (local.get $x)))
58 (func (export "v128.load32_lane_3_align_1")
59 (param $address i32) (param $x v128) (result v128)
60 (v128.load32_lane align=1 3 (local.get $address) (local.get $x)))
61 (func (export "v128.load32_lane_3_align_2")
62 (param $address i32) (param $x v128) (result v128)
63 (v128.load32_lane align=2 3 (local.get $address) (local.get $x)))
64 (func (export "v128.load32_lane_3_align_4")
65 (param $address i32) (param $x v128) (result v128)
66 (v128.load32_lane align=4 3 (local.get $address) (local.get $x)))
67)
68
69(assert_return (invoke "v128.load32_lane_0" (i32.const 0)
70 (v128.const i32x4 0 0 0 0))
71 (v128.const i32x4 50462976 0 0 0))
72(assert_return (invoke "v128.load32_lane_1" (i32.const 1)
73 (v128.const i32x4 0 0 0 0))
74 (v128.const i32x4 0 67305985 0 0))
75(assert_return (invoke "v128.load32_lane_2" (i32.const 2)
76 (v128.const i32x4 0 0 0 0))
77 (v128.const i32x4 0 0 84148994 0))
78(assert_return (invoke "v128.load32_lane_3" (i32.const 3)
79 (v128.const i32x4 0 0 0 0))
80 (v128.const i32x4 0 0 0 100992003))
81(assert_return (invoke "v128.load32_lane_0_offset_0" (v128.const i32x4 0 0 0 0))
82 (v128.const i32x4 50462976 0 0 0))
83(assert_return (invoke "v128.load32_lane_1_offset_1" (v128.const i32x4 0 0 0 0))
84 (v128.const i32x4 0 67305985 0 0))
85(assert_return (invoke "v128.load32_lane_2_offset_2" (v128.const i32x4 0 0 0 0))
86 (v128.const i32x4 0 0 84148994 0))
87(assert_return (invoke "v128.load32_lane_3_offset_3" (v128.const i32x4 0 0 0 0))
88 (v128.const i32x4 0 0 0 100992003))
89(assert_return (invoke "v128.load32_lane_0_align_1" (i32.const 0)
90 (v128.const i32x4 0 0 0 0))
91 (v128.const i32x4 50462976 0 0 0))
92(assert_return (invoke "v128.load32_lane_0_align_2" (i32.const 0)
93 (v128.const i32x4 0 0 0 0))
94 (v128.const i32x4 50462976 0 0 0))
95(assert_return (invoke "v128.load32_lane_0_align_4" (i32.const 0)
96 (v128.const i32x4 0 0 0 0))
97 (v128.const i32x4 50462976 0 0 0))
98(assert_return (invoke "v128.load32_lane_1_align_1" (i32.const 1)
99 (v128.const i32x4 0 0 0 0))
100 (v128.const i32x4 0 67305985 0 0))
101(assert_return (invoke "v128.load32_lane_1_align_2" (i32.const 1)
102 (v128.const i32x4 0 0 0 0))
103 (v128.const i32x4 0 67305985 0 0))
104(assert_return (invoke "v128.load32_lane_1_align_4" (i32.const 1)
105 (v128.const i32x4 0 0 0 0))
106 (v128.const i32x4 0 67305985 0 0))
107(assert_return (invoke "v128.load32_lane_2_align_1" (i32.const 2)
108 (v128.const i32x4 0 0 0 0))
109 (v128.const i32x4 0 0 84148994 0))
110(assert_return (invoke "v128.load32_lane_2_align_2" (i32.const 2)
111 (v128.const i32x4 0 0 0 0))
112 (v128.const i32x4 0 0 84148994 0))
113(assert_return (invoke "v128.load32_lane_2_align_4" (i32.const 2)
114 (v128.const i32x4 0 0 0 0))
115 (v128.const i32x4 0 0 84148994 0))
116(assert_return (invoke "v128.load32_lane_3_align_1" (i32.const 3)
117 (v128.const i32x4 0 0 0 0))
118 (v128.const i32x4 0 0 0 100992003))
119(assert_return (invoke "v128.load32_lane_3_align_2" (i32.const 3)
120 (v128.const i32x4 0 0 0 0))
121 (v128.const i32x4 0 0 0 100992003))
122(assert_return (invoke "v128.load32_lane_3_align_4" (i32.const 3)
123 (v128.const i32x4 0 0 0 0))
124 (v128.const i32x4 0 0 0 100992003))
125
126;; type check
127(assert_invalid (module (memory 1)
128 (func (param $x v128) (result v128)
129 (v128.load32_lane 0 (local.get $x) (i32.const 0))))
130 "type mismatch")
131
132;; invalid lane index
133(assert_invalid (module (memory 1)
134 (func (param $x v128) (result v128)
135 (v128.load32_lane 4 (i32.const 0) (local.get $x))))
136 "invalid lane index")
137
138;; invalid memarg alignment
139(assert_invalid
140 (module (memory 1)
141 (func (param $x v128) (result v128)
142 (v128.load32_lane align=8 0 (i32.const 0) (local.get $x))))
143 "alignment must not be larger than natural")
View as plain text