1 // REQUIRES: aarch64-registered-target
2 // RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
3 // RUN: -ffp-contract=fast -S -O3 -o - %s | FileCheck %s
4
5 // Test new aarch64 intrinsics and types
6
7 #include <arm_neon.h>
8
test_vtbl1_s8(int8x8_t a,int8x8_t b)9 int8x8_t test_vtbl1_s8(int8x8_t a, int8x8_t b) {
10 // CHECK-LABEL: test_vtbl1_s8
11 return vtbl1_s8(a, b);
12 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
13 }
14
test_vqtbl1_s8(int8x16_t a,int8x8_t b)15 int8x8_t test_vqtbl1_s8(int8x16_t a, int8x8_t b) {
16 // CHECK-LABEL: test_vqtbl1_s8
17 return vqtbl1_s8(a, b);
18 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
19 }
20
test_vtbl2_s8(int8x8x2_t a,int8x8_t b)21 int8x8_t test_vtbl2_s8(int8x8x2_t a, int8x8_t b) {
22 // CHECK-LABEL: test_vtbl2_s8
23 return vtbl2_s8(a, b);
24 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
25 }
26
test_vqtbl2_s8(int8x16x2_t a,int8x8_t b)27 int8x8_t test_vqtbl2_s8(int8x16x2_t a, int8x8_t b) {
28 // CHECK-LABEL: test_vqtbl2_s8
29 return vqtbl2_s8(a, b);
30 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
31 }
32
test_vtbl3_s8(int8x8x3_t a,int8x8_t b)33 int8x8_t test_vtbl3_s8(int8x8x3_t a, int8x8_t b) {
34 // CHECK-LABEL: test_vtbl3_s8
35 return vtbl3_s8(a, b);
36 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
37 }
38
test_vqtbl3_s8(int8x16x3_t a,int8x8_t b)39 int8x8_t test_vqtbl3_s8(int8x16x3_t a, int8x8_t b) {
40 // CHECK-LABEL: test_vqtbl3_s8
41 return vqtbl3_s8(a, b);
42 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
43 }
44
test_vtbl4_s8(int8x8x4_t a,int8x8_t b)45 int8x8_t test_vtbl4_s8(int8x8x4_t a, int8x8_t b) {
46 // CHECK-LABEL: test_vtbl4_s8
47 return vtbl4_s8(a, b);
48 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
49 }
50
test_vqtbl4_s8(int8x16x4_t a,int8x8_t b)51 int8x8_t test_vqtbl4_s8(int8x16x4_t a, int8x8_t b) {
52 // CHECK-LABEL: test_vqtbl4_s8
53 return vqtbl4_s8(a, b);
54 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
55 }
56
test_vqtbl1q_s8(int8x16_t a,int8x16_t b)57 int8x16_t test_vqtbl1q_s8(int8x16_t a, int8x16_t b) {
58 // CHECK-LABEL: test_vqtbl1q_s8
59 return vqtbl1q_s8(a, b);
60 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
61 }
62
test_vqtbl2q_s8(int8x16x2_t a,int8x16_t b)63 int8x16_t test_vqtbl2q_s8(int8x16x2_t a, int8x16_t b) {
64 // CHECK-LABEL: test_vqtbl2q_s8
65 return vqtbl2q_s8(a, b);
66 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
67 }
68
test_vqtbl3q_s8(int8x16x3_t a,int8x16_t b)69 int8x16_t test_vqtbl3q_s8(int8x16x3_t a, int8x16_t b) {
70 // CHECK-LABEL: test_vqtbl3q_s8
71 return vqtbl3q_s8(a, b);
72 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
73 }
74
test_vqtbl4q_s8(int8x16x4_t a,int8x16_t b)75 int8x16_t test_vqtbl4q_s8(int8x16x4_t a, int8x16_t b) {
76 // CHECK-LABEL: test_vqtbl4q_s8
77 return vqtbl4q_s8(a, b);
78 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
79 }
80
test_vtbx1_s8(int8x8_t a,int8x8_t b,int8x8_t c)81 int8x8_t test_vtbx1_s8(int8x8_t a, int8x8_t b, int8x8_t c) {
82 // CHECK-LABEL: test_vtbx1_s8
83 return vtbx1_s8(a, b, c);
84 // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #0
85 // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
86 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
87 // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
88 // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
89 }
90
test_vtbx2_s8(int8x8_t a,int8x8x2_t b,int8x8_t c)91 int8x8_t test_vtbx2_s8(int8x8_t a, int8x8x2_t b, int8x8_t c) {
92 // CHECK-LABEL: test_vtbx2_s8
93 return vtbx2_s8(a, b, c);
94 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
95 }
96
test_vtbx3_s8(int8x8_t a,int8x8x3_t b,int8x8_t c)97 int8x8_t test_vtbx3_s8(int8x8_t a, int8x8x3_t b, int8x8_t c) {
98 // CHECK-LABEL: test_vtbx3_s8
99 return vtbx3_s8(a, b, c);
100 // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #0
101 // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
102 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
103 // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
104 // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
105 }
106
test_vtbx4_s8(int8x8_t a,int8x8x4_t b,int8x8_t c)107 int8x8_t test_vtbx4_s8(int8x8_t a, int8x8x4_t b, int8x8_t c) {
108 // CHECK-LABEL: test_vtbx4_s8
109 return vtbx4_s8(a, b, c);
110 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
111 }
112
test_vqtbx1_s8(int8x8_t a,int8x16_t b,int8x8_t c)113 int8x8_t test_vqtbx1_s8(int8x8_t a, int8x16_t b, int8x8_t c) {
114 // CHECK-LABEL: test_vqtbx1_s8
115 return vqtbx1_s8(a, b, c);
116 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
117 }
118
test_vqtbx2_s8(int8x8_t a,int8x16x2_t b,int8x8_t c)119 int8x8_t test_vqtbx2_s8(int8x8_t a, int8x16x2_t b, int8x8_t c) {
120 // CHECK-LABEL: test_vqtbx2_s8
121 return vqtbx2_s8(a, b, c);
122 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
123 }
124
test_vqtbx3_s8(int8x8_t a,int8x16x3_t b,int8x8_t c)125 int8x8_t test_vqtbx3_s8(int8x8_t a, int8x16x3_t b, int8x8_t c) {
126 // CHECK-LABEL: test_vqtbx3_s8
127 return vqtbx3_s8(a, b, c);
128 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
129 }
130
test_vqtbx4_s8(int8x8_t a,int8x16x4_t b,int8x8_t c)131 int8x8_t test_vqtbx4_s8(int8x8_t a, int8x16x4_t b, int8x8_t c) {
132 // CHECK-LABEL: test_vqtbx4_s8
133 return vqtbx4_s8(a, b, c);
134 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
135 }
136
test_vqtbx1q_s8(int8x16_t a,int8x16_t b,int8x16_t c)137 int8x16_t test_vqtbx1q_s8(int8x16_t a, int8x16_t b, int8x16_t c) {
138 // CHECK-LABEL: test_vqtbx1q_s8
139 return vqtbx1q_s8(a, b, c);
140 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
141 }
142
test_vqtbx2q_s8(int8x16_t a,int8x16x2_t b,int8x16_t c)143 int8x16_t test_vqtbx2q_s8(int8x16_t a, int8x16x2_t b, int8x16_t c) {
144 // CHECK-LABEL: test_vqtbx2q_s8
145 return vqtbx2q_s8(a, b, c);
146 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
147 }
148
test_vqtbx3q_s8(int8x16_t a,int8x16x3_t b,int8x16_t c)149 int8x16_t test_vqtbx3q_s8(int8x16_t a, int8x16x3_t b, int8x16_t c) {
150 // CHECK-LABEL: test_vqtbx3q_s8
151 return vqtbx3q_s8(a, b, c);
152 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
153 }
154
test_vqtbx4q_s8(int8x16_t a,int8x16x4_t b,int8x16_t c)155 int8x16_t test_vqtbx4q_s8(int8x16_t a, int8x16x4_t b, int8x16_t c) {
156 // CHECK-LABEL: test_vqtbx4q_s8
157 return vqtbx4q_s8(a, b, c);
158 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
159 }
160
test_vtbl1_u8(uint8x8_t a,uint8x8_t b)161 uint8x8_t test_vtbl1_u8(uint8x8_t a, uint8x8_t b) {
162 // CHECK-LABEL: test_vtbl1_u8
163 return vtbl1_u8(a, b);
164 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
165 }
166
test_vqtbl1_u8(uint8x16_t a,uint8x8_t b)167 uint8x8_t test_vqtbl1_u8(uint8x16_t a, uint8x8_t b) {
168 // CHECK-LABEL: test_vqtbl1_u8
169 return vqtbl1_u8(a, b);
170 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
171 }
172
test_vtbl2_u8(uint8x8x2_t a,uint8x8_t b)173 uint8x8_t test_vtbl2_u8(uint8x8x2_t a, uint8x8_t b) {
174 // CHECK-LABEL: test_vtbl2_u8
175 return vtbl2_u8(a, b);
176 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
177 }
178
test_vqtbl2_u8(uint8x16x2_t a,uint8x8_t b)179 uint8x8_t test_vqtbl2_u8(uint8x16x2_t a, uint8x8_t b) {
180 // CHECK-LABEL: test_vqtbl2_u8
181 return vqtbl2_u8(a, b);
182 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
183 }
184
test_vtbl3_u8(uint8x8x3_t a,uint8x8_t b)185 uint8x8_t test_vtbl3_u8(uint8x8x3_t a, uint8x8_t b) {
186 // CHECK-LABEL: test_vtbl3_u8
187 return vtbl3_u8(a, b);
188 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
189 }
190
test_vqtbl3_u8(uint8x16x3_t a,uint8x8_t b)191 uint8x8_t test_vqtbl3_u8(uint8x16x3_t a, uint8x8_t b) {
192 // CHECK-LABEL: test_vqtbl3_u8
193 return vqtbl3_u8(a, b);
194 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
195 }
196
test_vtbl4_u8(uint8x8x4_t a,uint8x8_t b)197 uint8x8_t test_vtbl4_u8(uint8x8x4_t a, uint8x8_t b) {
198 // CHECK-LABEL: test_vtbl4_u8
199 return vtbl4_u8(a, b);
200 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
201 }
202
test_vqtbl4_u8(uint8x16x4_t a,uint8x8_t b)203 uint8x8_t test_vqtbl4_u8(uint8x16x4_t a, uint8x8_t b) {
204 // CHECK-LABEL: test_vqtbl4_u8
205 return vqtbl4_u8(a, b);
206 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
207 }
208
test_vqtbl1q_u8(uint8x16_t a,uint8x16_t b)209 uint8x16_t test_vqtbl1q_u8(uint8x16_t a, uint8x16_t b) {
210 // CHECK-LABEL: test_vqtbl1q_u8
211 return vqtbl1q_u8(a, b);
212 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
213 }
214
test_vqtbl2q_u8(uint8x16x2_t a,uint8x16_t b)215 uint8x16_t test_vqtbl2q_u8(uint8x16x2_t a, uint8x16_t b) {
216 // CHECK-LABEL: test_vqtbl2q_u8
217 return vqtbl2q_u8(a, b);
218 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
219 }
220
test_vqtbl3q_u8(uint8x16x3_t a,uint8x16_t b)221 uint8x16_t test_vqtbl3q_u8(uint8x16x3_t a, uint8x16_t b) {
222 // CHECK-LABEL: test_vqtbl3q_u8
223 return vqtbl3q_u8(a, b);
224 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
225 }
226
test_vqtbl4q_u8(uint8x16x4_t a,uint8x16_t b)227 uint8x16_t test_vqtbl4q_u8(uint8x16x4_t a, uint8x16_t b) {
228 // CHECK-LABEL: test_vqtbl4q_u8
229 return vqtbl4q_u8(a, b);
230 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
231 }
232
test_vtbx1_u8(uint8x8_t a,uint8x8_t b,uint8x8_t c)233 uint8x8_t test_vtbx1_u8(uint8x8_t a, uint8x8_t b, uint8x8_t c) {
234 // CHECK-LABEL: test_vtbx1_u8
235 return vtbx1_u8(a, b, c);
236 // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #0
237 // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
238 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
239 // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
240 // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
241 }
242
test_vtbx2_u8(uint8x8_t a,uint8x8x2_t b,uint8x8_t c)243 uint8x8_t test_vtbx2_u8(uint8x8_t a, uint8x8x2_t b, uint8x8_t c) {
244 // CHECK-LABEL: test_vtbx2_u8
245 return vtbx2_u8(a, b, c);
246 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
247 }
248
test_vtbx3_u8(uint8x8_t a,uint8x8x3_t b,uint8x8_t c)249 uint8x8_t test_vtbx3_u8(uint8x8_t a, uint8x8x3_t b, uint8x8_t c) {
250 // CHECK-LABEL: test_vtbx3_u8
251 return vtbx3_u8(a, b, c);
252 // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #0
253 // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
254 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
255 // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
256 // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
257 }
258
test_vtbx4_u8(uint8x8_t a,uint8x8x4_t b,uint8x8_t c)259 uint8x8_t test_vtbx4_u8(uint8x8_t a, uint8x8x4_t b, uint8x8_t c) {
260 // CHECK-LABEL: test_vtbx4_u8
261 return vtbx4_u8(a, b, c);
262 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
263 }
264
test_vqtbx1_u8(uint8x8_t a,uint8x16_t b,uint8x8_t c)265 uint8x8_t test_vqtbx1_u8(uint8x8_t a, uint8x16_t b, uint8x8_t c) {
266 // CHECK-LABEL: test_vqtbx1_u8
267 return vqtbx1_u8(a, b, c);
268 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
269 }
270
test_vqtbx2_u8(uint8x8_t a,uint8x16x2_t b,uint8x8_t c)271 uint8x8_t test_vqtbx2_u8(uint8x8_t a, uint8x16x2_t b, uint8x8_t c) {
272 // CHECK-LABEL: test_vqtbx2_u8
273 return vqtbx2_u8(a, b, c);
274 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
275 }
276
test_vqtbx3_u8(uint8x8_t a,uint8x16x3_t b,uint8x8_t c)277 uint8x8_t test_vqtbx3_u8(uint8x8_t a, uint8x16x3_t b, uint8x8_t c) {
278 // CHECK-LABEL: test_vqtbx3_u8
279 return vqtbx3_u8(a, b, c);
280 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
281 }
282
test_vqtbx4_u8(uint8x8_t a,uint8x16x4_t b,uint8x8_t c)283 uint8x8_t test_vqtbx4_u8(uint8x8_t a, uint8x16x4_t b, uint8x8_t c) {
284 // CHECK-LABEL: test_vqtbx4_u8
285 return vqtbx4_u8(a, b, c);
286 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
287 }
288
test_vqtbx1q_u8(uint8x16_t a,uint8x16_t b,uint8x16_t c)289 uint8x16_t test_vqtbx1q_u8(uint8x16_t a, uint8x16_t b, uint8x16_t c) {
290 // CHECK-LABEL: test_vqtbx1q_u8
291 return vqtbx1q_u8(a, b, c);
292 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
293 }
294
test_vqtbx2q_u8(uint8x16_t a,uint8x16x2_t b,uint8x16_t c)295 uint8x16_t test_vqtbx2q_u8(uint8x16_t a, uint8x16x2_t b, uint8x16_t c) {
296 // CHECK-LABEL: test_vqtbx2q_u8
297 return vqtbx2q_u8(a, b, c);
298 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
299 }
300
test_vqtbx3q_u8(uint8x16_t a,uint8x16x3_t b,uint8x16_t c)301 uint8x16_t test_vqtbx3q_u8(uint8x16_t a, uint8x16x3_t b, uint8x16_t c) {
302 // CHECK-LABEL: test_vqtbx3q_u8
303 return vqtbx3q_u8(a, b, c);
304 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
305 }
306
test_vqtbx4q_u8(uint8x16_t a,uint8x16x4_t b,uint8x16_t c)307 uint8x16_t test_vqtbx4q_u8(uint8x16_t a, uint8x16x4_t b, uint8x16_t c) {
308 // CHECK-LABEL: test_vqtbx4q_u8
309 return vqtbx4q_u8(a, b, c);
310 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
311 }
312
test_vtbl1_p8(poly8x8_t a,uint8x8_t b)313 poly8x8_t test_vtbl1_p8(poly8x8_t a, uint8x8_t b) {
314 // CHECK-LABEL: test_vtbl1_p8
315 return vtbl1_p8(a, b);
316 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
317 }
318
test_vqtbl1_p8(poly8x16_t a,uint8x8_t b)319 poly8x8_t test_vqtbl1_p8(poly8x16_t a, uint8x8_t b) {
320 // CHECK-LABEL: test_vqtbl1_p8
321 return vqtbl1_p8(a, b);
322 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
323 }
324
test_vtbl2_p8(poly8x8x2_t a,uint8x8_t b)325 poly8x8_t test_vtbl2_p8(poly8x8x2_t a, uint8x8_t b) {
326 // CHECK-LABEL: test_vtbl2_p8
327 return vtbl2_p8(a, b);
328 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
329 }
330
test_vqtbl2_p8(poly8x16x2_t a,uint8x8_t b)331 poly8x8_t test_vqtbl2_p8(poly8x16x2_t a, uint8x8_t b) {
332 // CHECK-LABEL: test_vqtbl2_p8
333 return vqtbl2_p8(a, b);
334 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
335 }
336
test_vtbl3_p8(poly8x8x3_t a,uint8x8_t b)337 poly8x8_t test_vtbl3_p8(poly8x8x3_t a, uint8x8_t b) {
338 // CHECK-LABEL: test_vtbl3_p8
339 return vtbl3_p8(a, b);
340 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
341 }
342
test_vqtbl3_p8(poly8x16x3_t a,uint8x8_t b)343 poly8x8_t test_vqtbl3_p8(poly8x16x3_t a, uint8x8_t b) {
344 // CHECK-LABEL: test_vqtbl3_p8
345 return vqtbl3_p8(a, b);
346 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
347 }
348
test_vtbl4_p8(poly8x8x4_t a,uint8x8_t b)349 poly8x8_t test_vtbl4_p8(poly8x8x4_t a, uint8x8_t b) {
350 // CHECK-LABEL: test_vtbl4_p8
351 return vtbl4_p8(a, b);
352 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
353 }
354
test_vqtbl4_p8(poly8x16x4_t a,uint8x8_t b)355 poly8x8_t test_vqtbl4_p8(poly8x16x4_t a, uint8x8_t b) {
356 // CHECK-LABEL: test_vqtbl4_p8
357 return vqtbl4_p8(a, b);
358 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
359 }
360
test_vqtbl1q_p8(poly8x16_t a,uint8x16_t b)361 poly8x16_t test_vqtbl1q_p8(poly8x16_t a, uint8x16_t b) {
362 // CHECK-LABEL: test_vqtbl1q_p8
363 return vqtbl1q_p8(a, b);
364 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
365 }
366
test_vqtbl2q_p8(poly8x16x2_t a,uint8x16_t b)367 poly8x16_t test_vqtbl2q_p8(poly8x16x2_t a, uint8x16_t b) {
368 // CHECK-LABEL: test_vqtbl2q_p8
369 return vqtbl2q_p8(a, b);
370 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
371 }
372
test_vqtbl3q_p8(poly8x16x3_t a,uint8x16_t b)373 poly8x16_t test_vqtbl3q_p8(poly8x16x3_t a, uint8x16_t b) {
374 // CHECK-LABEL: test_vqtbl3q_p8
375 return vqtbl3q_p8(a, b);
376 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
377 }
378
test_vqtbl4q_p8(poly8x16x4_t a,uint8x16_t b)379 poly8x16_t test_vqtbl4q_p8(poly8x16x4_t a, uint8x16_t b) {
380 // CHECK-LABEL: test_vqtbl4q_p8
381 return vqtbl4q_p8(a, b);
382 // CHECK: tbl {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
383 }
384
test_vtbx1_p8(poly8x8_t a,poly8x8_t b,uint8x8_t c)385 poly8x8_t test_vtbx1_p8(poly8x8_t a, poly8x8_t b, uint8x8_t c) {
386 // CHECK-LABEL: test_vtbx1_p8
387 return vtbx1_p8(a, b, c);
388 // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #0
389 // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
390 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
391 // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
392 // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
393 }
394
test_vtbx2_p8(poly8x8_t a,poly8x8x2_t b,uint8x8_t c)395 poly8x8_t test_vtbx2_p8(poly8x8_t a, poly8x8x2_t b, uint8x8_t c) {
396 // CHECK-LABEL: test_vtbx2_p8
397 return vtbx2_p8(a, b, c);
398 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
399 }
400
test_vtbx3_p8(poly8x8_t a,poly8x8x3_t b,uint8x8_t c)401 poly8x8_t test_vtbx3_p8(poly8x8_t a, poly8x8x3_t b, uint8x8_t c) {
402 // CHECK-LABEL: test_vtbx3_p8
403 return vtbx3_p8(a, b, c);
404 // CHECK: movi {{v[0-9]+.8b|d[0-9]+}}, #0
405 // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
406 // CHECK: tbl {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
407 // CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
408 // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
409 }
410
test_vtbx4_p8(poly8x8_t a,poly8x8x4_t b,uint8x8_t c)411 poly8x8_t test_vtbx4_p8(poly8x8_t a, poly8x8x4_t b, uint8x8_t c) {
412 // CHECK-LABEL: test_vtbx4_p8
413 return vtbx4_p8(a, b, c);
414 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
415 }
416
test_vqtbx1_p8(poly8x8_t a,uint8x16_t b,uint8x8_t c)417 poly8x8_t test_vqtbx1_p8(poly8x8_t a, uint8x16_t b, uint8x8_t c) {
418 // CHECK-LABEL: test_vqtbx1_p8
419 return vqtbx1_p8(a, b, c);
420 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
421 }
422
test_vqtbx2_p8(poly8x8_t a,poly8x16x2_t b,uint8x8_t c)423 poly8x8_t test_vqtbx2_p8(poly8x8_t a, poly8x16x2_t b, uint8x8_t c) {
424 // CHECK-LABEL: test_vqtbx2_p8
425 return vqtbx2_p8(a, b, c);
426 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
427 }
428
test_vqtbx3_p8(poly8x8_t a,poly8x16x3_t b,uint8x8_t c)429 poly8x8_t test_vqtbx3_p8(poly8x8_t a, poly8x16x3_t b, uint8x8_t c) {
430 // CHECK-LABEL: test_vqtbx3_p8
431 return vqtbx3_p8(a, b, c);
432 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
433 }
434
test_vqtbx4_p8(poly8x8_t a,poly8x16x4_t b,uint8x8_t c)435 poly8x8_t test_vqtbx4_p8(poly8x8_t a, poly8x16x4_t b, uint8x8_t c) {
436 // CHECK-LABEL: test_vqtbx4_p8
437 return vqtbx4_p8(a, b, c);
438 // CHECK: tbx {{v[0-9]+}}.8b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.8b
439 }
440
test_vqtbx1q_p8(poly8x16_t a,uint8x16_t b,uint8x16_t c)441 poly8x16_t test_vqtbx1q_p8(poly8x16_t a, uint8x16_t b, uint8x16_t c) {
442 // CHECK-LABEL: test_vqtbx1q_p8
443 return vqtbx1q_p8(a, b, c);
444 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
445 }
446
test_vqtbx2q_p8(poly8x16_t a,poly8x16x2_t b,uint8x16_t c)447 poly8x16_t test_vqtbx2q_p8(poly8x16_t a, poly8x16x2_t b, uint8x16_t c) {
448 // CHECK-LABEL: test_vqtbx2q_p8
449 return vqtbx2q_p8(a, b, c);
450 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
451 }
452
test_vqtbx3q_p8(poly8x16_t a,poly8x16x3_t b,uint8x16_t c)453 poly8x16_t test_vqtbx3q_p8(poly8x16_t a, poly8x16x3_t b, uint8x16_t c) {
454 // CHECK-LABEL: test_vqtbx3q_p8
455 return vqtbx3q_p8(a, b, c);
456 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
457 }
458
test_vqtbx4q_p8(poly8x16_t a,poly8x16x4_t b,uint8x16_t c)459 poly8x16_t test_vqtbx4q_p8(poly8x16_t a, poly8x16x4_t b, uint8x16_t c) {
460 // CHECK-LABEL: test_vqtbx4q_p8
461 return vqtbx4q_p8(a, b, c);
462 // CHECK: tbx {{v[0-9]+}}.16b, {{{ ?v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b ?}}}, {{v[0-9]+}}.16b
463 }
464