1 | // RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +neon -ffreestanding -fsyntax-only -verify %s |
2 | // RUN: %clang_cc1 -triple arm64-linux-gnu -target-feature +neon -ffreestanding -fsyntax-only -verify %s |
3 | |
4 | #include <arm_neon.h> |
5 | |
6 | void test_vext_8bit(int8x8_t small, int8x16_t big) { |
7 | vext_s8(small, small, 7); |
8 | vext_u8(small, small, 7); |
9 | vext_p8(small, small, 7); |
10 | vextq_s8(big, big, 15); |
11 | vextq_u8(big, big, 15); |
12 | vextq_p8(big, big, 15); |
13 | |
14 | vext_s8(small, small, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
15 | vext_u8(small, small, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
16 | vext_p8(small, small, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
17 | vextq_s8(big, big, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
18 | vextq_u8(big, big, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
19 | vextq_p8(big, big, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
20 | } |
21 | |
22 | void test_mul_lane_f64(float64x1_t small, float64x2_t big, float64x2_t rhs) { |
23 | vmul_lane_f64(small, small, 0); |
24 | vmul_laneq_f64(small, big, 1); |
25 | vmulq_lane_f64(big, small, 0); |
26 | vmulq_laneq_f64(big, big, 1); |
27 | vfma_lane_f64(small, small, small, 0); |
28 | vfma_laneq_f64(small, small, big, 1); |
29 | vfmaq_lane_f64(big, big, small, 0); |
30 | vfmaq_laneq_f64(big, big, big, 1); |
31 | |
32 | vmul_lane_f64(small, small, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
33 | vmul_laneq_f64(small, big, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
34 | vfma_lane_f64(small, small, small, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
35 | vfma_laneq_f64(small, small, big, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
36 | vfmaq_laneq_f64(big, big, big, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
37 | } |
38 | |
39 | void test_ld1st1(int8x8_t small, int8x16_t big, void *addr) { |
40 | vld1_lane_s8(addr, small, 7); |
41 | vld1_lane_s16(addr, small, 3); |
42 | vld1_lane_s32(addr, small, 1); |
43 | vld1_lane_s64(addr, small, 0); |
44 | |
45 | vld1q_lane_s8(addr, big, 15); |
46 | vld1q_lane_s16(addr, big, 7); |
47 | vld1q_lane_s32(addr, big, 3); |
48 | vld1q_lane_s64(addr, big, 1); |
49 | |
50 | vld1_lane_s8(addr, small, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
51 | vld1_lane_s16(addr, small, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
52 | vld1_lane_s32(addr, small, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
53 | vld1_lane_s64(addr, small, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
54 | |
55 | vld1q_lane_s8(addr, big, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
56 | vld1q_lane_s16(addr, big, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
57 | vld1q_lane_s32(addr, big, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
58 | vld1q_lane_s64(addr, big, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
59 | |
60 | vst1_lane_s8(addr, small, 7); |
61 | vst1_lane_s16(addr, small, 3); |
62 | vst1_lane_s32(addr, small, 1); |
63 | vst1_lane_s64(addr, small, 0); |
64 | |
65 | vst1q_lane_s8(addr, big, 15); |
66 | vst1q_lane_s16(addr, big, 7); |
67 | vst1q_lane_s32(addr, big, 3); |
68 | vst1q_lane_s64(addr, big, 1); |
69 | |
70 | vst1_lane_s8(addr, small, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
71 | vst1_lane_s16(addr, small, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
72 | vst1_lane_s32(addr, small, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
73 | vst1_lane_s64(addr, small, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
74 | |
75 | vst1q_lane_s8(addr, big, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
76 | vst1q_lane_s16(addr, big, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
77 | vst1q_lane_s32(addr, big, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
78 | vst1q_lane_s64(addr, big, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
79 | } |
80 | |
81 | void test_ld2st2(int8x8x2_t small8, int8x16x2_t big8, |
82 | int16x4x2_t small16, int16x8x2_t big16, |
83 | int32x2x2_t small32, int32x4x2_t big32, |
84 | int64x1x2_t small64, int64x2x2_t big64, |
85 | void *addr) { |
86 | vld2_lane_s8(addr, small8, 7); |
87 | vld2_lane_s16(addr, small16, 3); |
88 | vld2_lane_s32(addr, small32, 1); |
89 | vld2_lane_s64(addr, small64, 0); |
90 | |
91 | vld2q_lane_s8(addr, big8, 15); |
92 | vld2q_lane_s16(addr, big16, 7); |
93 | vld2q_lane_s32(addr, big32, 3); |
94 | vld2q_lane_s64(addr, big64, 1); |
95 | |
96 | vld2_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
97 | vld2_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
98 | vld2_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
99 | vld2_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
100 | |
101 | vld2q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
102 | vld2q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
103 | vld2q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
104 | vld2q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
105 | |
106 | vst2_lane_s8(addr, small8, 7); |
107 | vst2_lane_s16(addr, small16, 3); |
108 | vst2_lane_s32(addr, small32, 1); |
109 | vst2_lane_s64(addr, small64, 0); |
110 | |
111 | vst2q_lane_s8(addr, big8, 15); |
112 | vst2q_lane_s16(addr, big16, 7); |
113 | vst2q_lane_s32(addr, big32, 3); |
114 | vst2q_lane_s64(addr, big64, 1); |
115 | |
116 | vst2_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
117 | vst2_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
118 | vst2_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
119 | vst2_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
120 | |
121 | vst2q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
122 | vst2q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
123 | vst2q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
124 | vst2q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
125 | } |
126 | |
127 | void test_ld3st3(int8x8x3_t small8, int8x16x3_t big8, |
128 | int16x4x3_t small16, int16x8x3_t big16, |
129 | int32x2x3_t small32, int32x4x3_t big32, |
130 | int64x1x3_t small64, int64x2x3_t big64, |
131 | void *addr) { |
132 | vld3_lane_s8(addr, small8, 7); |
133 | vld3_lane_s16(addr, small16, 3); |
134 | vld3_lane_s32(addr, small32, 1); |
135 | vld3_lane_s64(addr, small64, 0); |
136 | |
137 | vld3q_lane_s8(addr, big8, 15); |
138 | vld3q_lane_s16(addr, big16, 7); |
139 | vld3q_lane_s32(addr, big32, 3); |
140 | vld3q_lane_s64(addr, big64, 1); |
141 | |
142 | vld3_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
143 | vld3_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
144 | vld3_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
145 | vld3_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
146 | |
147 | vld3q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
148 | vld3q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
149 | vld3q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
150 | vld3q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
151 | |
152 | vst3_lane_s8(addr, small8, 7); |
153 | vst3_lane_s16(addr, small16, 3); |
154 | vst3_lane_s32(addr, small32, 1); |
155 | vst3_lane_s64(addr, small64, 0); |
156 | |
157 | vst3q_lane_s8(addr, big8, 15); |
158 | vst3q_lane_s16(addr, big16, 7); |
159 | vst3q_lane_s32(addr, big32, 3); |
160 | vst3q_lane_s64(addr, big64, 1); |
161 | |
162 | vst3_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
163 | vst3_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
164 | vst3_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
165 | vst3_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
166 | |
167 | vst3q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
168 | vst3q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
169 | vst3q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
170 | vst3q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
171 | } |
172 | |
173 | void test_ld4st4(int8x8x4_t small8, int8x16x4_t big8, |
174 | int16x4x4_t small16, int16x8x4_t big16, |
175 | int32x2x4_t small32, int32x4x4_t big32, |
176 | int64x1x4_t small64, int64x2x4_t big64, |
177 | void *addr) { |
178 | vld4_lane_s8(addr, small8, 7); |
179 | vld4_lane_s16(addr, small16, 3); |
180 | vld4_lane_s32(addr, small32, 1); |
181 | vld4_lane_s64(addr, small64, 0); |
182 | |
183 | vld4q_lane_s8(addr, big8, 15); |
184 | vld4q_lane_s16(addr, big16, 7); |
185 | vld4q_lane_s32(addr, big32, 3); |
186 | vld4q_lane_s64(addr, big64, 1); |
187 | |
188 | vld4_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
189 | vld4_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
190 | vld4_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
191 | vld4_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
192 | |
193 | vld4q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
194 | vld4q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
195 | vld4q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
196 | vld4q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
197 | |
198 | vst4_lane_s8(addr, small8, 7); |
199 | vst4_lane_s16(addr, small16, 3); |
200 | vst4_lane_s32(addr, small32, 1); |
201 | vst4_lane_s64(addr, small64, 0); |
202 | |
203 | vst4q_lane_s8(addr, big8, 15); |
204 | vst4q_lane_s16(addr, big16, 7); |
205 | vst4q_lane_s32(addr, big32, 3); |
206 | vst4q_lane_s64(addr, big64, 1); |
207 | |
208 | vst4_lane_s8(addr, small8, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
209 | vst4_lane_s16(addr, small16, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
210 | vst4_lane_s32(addr, small32, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
211 | vst4_lane_s64(addr, small64, 1); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
212 | |
213 | vst4q_lane_s8(addr, big8, 16); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
214 | vst4q_lane_s16(addr, big16, 8); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
215 | vst4q_lane_s32(addr, big32, 4); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
216 | vst4q_lane_s64(addr, big64, 2); // expected-error-re {{argument value {{.*}} is outside the valid range}} |
217 | } |
218 | |
219 | |