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