]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Sema/aarch64-neon-ranges.c
Vendor import of clang trunk r338150:
[FreeBSD/FreeBSD.git] / test / Sema / aarch64-neon-ranges.c
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