blob: 00eb2e45b089087c11a407a8af7af53647d7a2e2 [file] [log] [blame]
Stephen Hinesc568f1e2014-07-21 00:47:37 -07001// REQUIRES: aarch64-registered-target
Stephen Hines6bcf27b2014-05-29 04:14:42 -07002// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
Stephen Hines651f13c2014-04-23 16:59:28 -07003// RUN: -ffp-contract=fast -S -O3 -o - %s | FileCheck %s
Jiangning Liu03916912013-10-05 08:22:55 +00004
5// Test new aarch64 intrinsics and types
6
7#include <arm_neon.h>
8
9int16_t test_vaddlv_s8(int8x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070010 // CHECK-LABEL: test_vaddlv_s8
Jiangning Liu03916912013-10-05 08:22:55 +000011 return vaddlv_s8(a);
12 // CHECK: saddlv {{h[0-9]+}}, {{v[0-9]+}}.8b
13}
14
15int32_t test_vaddlv_s16(int16x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070016 // CHECK-LABEL: test_vaddlv_s16
Jiangning Liu03916912013-10-05 08:22:55 +000017 return vaddlv_s16(a);
18 // CHECK: saddlv {{s[0-9]+}}, {{v[0-9]+}}.4h
19}
20
21uint16_t test_vaddlv_u8(uint8x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070022 // CHECK-LABEL: test_vaddlv_u8
Jiangning Liu03916912013-10-05 08:22:55 +000023 return vaddlv_u8(a);
24 // CHECK: uaddlv {{h[0-9]+}}, {{v[0-9]+}}.8b
25}
26
27uint32_t test_vaddlv_u16(uint16x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070028 // CHECK-LABEL: test_vaddlv_u16
Jiangning Liu03916912013-10-05 08:22:55 +000029 return vaddlv_u16(a);
30 // CHECK: uaddlv {{s[0-9]+}}, {{v[0-9]+}}.4h
31}
32
33int16_t test_vaddlvq_s8(int8x16_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070034 // CHECK-LABEL: test_vaddlvq_s8
Jiangning Liu03916912013-10-05 08:22:55 +000035 return vaddlvq_s8(a);
36 // CHECK: saddlv {{h[0-9]+}}, {{v[0-9]+}}.16b
37}
38
39int32_t test_vaddlvq_s16(int16x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070040 // CHECK-LABEL: test_vaddlvq_s16
Jiangning Liu03916912013-10-05 08:22:55 +000041 return vaddlvq_s16(a);
42 // CHECK: saddlv {{s[0-9]+}}, {{v[0-9]+}}.8h
43}
44
45int64_t test_vaddlvq_s32(int32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070046 // CHECK-LABEL: test_vaddlvq_s32
Jiangning Liu03916912013-10-05 08:22:55 +000047 return vaddlvq_s32(a);
48 // CHECK: saddlv {{d[0-9]+}}, {{v[0-9]+}}.4s
49}
50
51uint16_t test_vaddlvq_u8(uint8x16_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070052 // CHECK-LABEL: test_vaddlvq_u8
Jiangning Liu03916912013-10-05 08:22:55 +000053 return vaddlvq_u8(a);
54 // CHECK: uaddlv {{h[0-9]+}}, {{v[0-9]+}}.16b
55}
56
57uint32_t test_vaddlvq_u16(uint16x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070058 // CHECK-LABEL: test_vaddlvq_u16
Jiangning Liu03916912013-10-05 08:22:55 +000059 return vaddlvq_u16(a);
60 // CHECK: uaddlv {{s[0-9]+}}, {{v[0-9]+}}.8h
61}
62
63uint64_t test_vaddlvq_u32(uint32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070064 // CHECK-LABEL: test_vaddlvq_u32
Jiangning Liu03916912013-10-05 08:22:55 +000065 return vaddlvq_u32(a);
66 // CHECK: uaddlv {{d[0-9]+}}, {{v[0-9]+}}.4s
67}
68
69int8_t test_vmaxv_s8(int8x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070070 // CHECK-LABEL: test_vmaxv_s8
Jiangning Liu03916912013-10-05 08:22:55 +000071 return vmaxv_s8(a);
72 // CHECK: smaxv {{b[0-9]+}}, {{v[0-9]+}}.8b
73}
74
75int16_t test_vmaxv_s16(int16x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070076 // CHECK-LABEL: test_vmaxv_s16
Jiangning Liu03916912013-10-05 08:22:55 +000077 return vmaxv_s16(a);
78 // CHECK: smaxv {{h[0-9]+}}, {{v[0-9]+}}.4h
79}
80
81uint8_t test_vmaxv_u8(uint8x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070082 // CHECK-LABEL: test_vmaxv_u8
Jiangning Liu03916912013-10-05 08:22:55 +000083 return vmaxv_u8(a);
84 // CHECK: umaxv {{b[0-9]+}}, {{v[0-9]+}}.8b
85}
86
87uint16_t test_vmaxv_u16(uint16x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070088 // CHECK-LABEL: test_vmaxv_u16
Jiangning Liu03916912013-10-05 08:22:55 +000089 return vmaxv_u16(a);
90 // CHECK: umaxv {{h[0-9]+}}, {{v[0-9]+}}.4h
91}
92
93int8_t test_vmaxvq_s8(int8x16_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070094 // CHECK-LABEL: test_vmaxvq_s8
Jiangning Liu03916912013-10-05 08:22:55 +000095 return vmaxvq_s8(a);
96 // CHECK: smaxv {{b[0-9]+}}, {{v[0-9]+}}.16b
97}
98
99int16_t test_vmaxvq_s16(int16x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700100 // CHECK-LABEL: test_vmaxvq_s16
Jiangning Liu03916912013-10-05 08:22:55 +0000101 return vmaxvq_s16(a);
102 // CHECK: smaxv {{h[0-9]+}}, {{v[0-9]+}}.8h
103}
104
105int32_t test_vmaxvq_s32(int32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700106 // CHECK-LABEL: test_vmaxvq_s32
Jiangning Liu03916912013-10-05 08:22:55 +0000107 return vmaxvq_s32(a);
108 // CHECK: smaxv {{s[0-9]+}}, {{v[0-9]+}}.4s
109}
110
111uint8_t test_vmaxvq_u8(uint8x16_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700112 // CHECK-LABEL: test_vmaxvq_u8
Jiangning Liu03916912013-10-05 08:22:55 +0000113 return vmaxvq_u8(a);
114 // CHECK: umaxv {{b[0-9]+}}, {{v[0-9]+}}.16b
115}
116
117uint16_t test_vmaxvq_u16(uint16x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700118 // CHECK-LABEL: test_vmaxvq_u16
Jiangning Liu03916912013-10-05 08:22:55 +0000119 return vmaxvq_u16(a);
120 // CHECK: umaxv {{h[0-9]+}}, {{v[0-9]+}}.8h
121}
122
123uint32_t test_vmaxvq_u32(uint32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700124 // CHECK-LABEL: test_vmaxvq_u32
Jiangning Liu03916912013-10-05 08:22:55 +0000125 return vmaxvq_u32(a);
126 // CHECK: umaxv {{s[0-9]+}}, {{v[0-9]+}}.4s
127}
128
129int8_t test_vminv_s8(int8x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700130 // CHECK-LABEL: test_vminv_s8
Jiangning Liu03916912013-10-05 08:22:55 +0000131 return vminv_s8(a);
132 // CHECK: sminv {{b[0-9]+}}, {{v[0-9]+}}.8b
133}
134
135int16_t test_vminv_s16(int16x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700136 // CHECK-LABEL: test_vminv_s16
Jiangning Liu03916912013-10-05 08:22:55 +0000137 return vminv_s16(a);
138 // CHECK: sminv {{h[0-9]+}}, {{v[0-9]+}}.4h
139}
140
141uint8_t test_vminv_u8(uint8x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700142 // CHECK-LABEL: test_vminv_u8
Jiangning Liu03916912013-10-05 08:22:55 +0000143 return vminv_u8(a);
144 // CHECK: uminv {{b[0-9]+}}, {{v[0-9]+}}.8b
145}
146
147uint16_t test_vminv_u16(uint16x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700148 // CHECK-LABEL: test_vminv_u16
Jiangning Liu03916912013-10-05 08:22:55 +0000149 return vminv_u16(a);
150 // CHECK: uminv {{h[0-9]+}}, {{v[0-9]+}}.4h
151}
152
153int8_t test_vminvq_s8(int8x16_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700154 // CHECK-LABEL: test_vminvq_s8
Jiangning Liu03916912013-10-05 08:22:55 +0000155 return vminvq_s8(a);
156 // CHECK: sminv {{b[0-9]+}}, {{v[0-9]+}}.16b
157}
158
159int16_t test_vminvq_s16(int16x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700160 // CHECK-LABEL: test_vminvq_s16
Jiangning Liu03916912013-10-05 08:22:55 +0000161 return vminvq_s16(a);
162 // CHECK: sminv {{h[0-9]+}}, {{v[0-9]+}}.8h
163}
164
165int32_t test_vminvq_s32(int32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700166 // CHECK-LABEL: test_vminvq_s32
Jiangning Liu03916912013-10-05 08:22:55 +0000167 return vminvq_s32(a);
168 // CHECK: sminv {{s[0-9]+}}, {{v[0-9]+}}.4s
169}
170
171uint8_t test_vminvq_u8(uint8x16_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700172 // CHECK-LABEL: test_vminvq_u8
Jiangning Liu03916912013-10-05 08:22:55 +0000173 return vminvq_u8(a);
174 // CHECK: uminv {{b[0-9]+}}, {{v[0-9]+}}.16b
175}
176
177uint16_t test_vminvq_u16(uint16x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700178 // CHECK-LABEL: test_vminvq_u16
Jiangning Liu03916912013-10-05 08:22:55 +0000179 return vminvq_u16(a);
180 // CHECK: uminv {{h[0-9]+}}, {{v[0-9]+}}.8h
181}
182
183uint32_t test_vminvq_u32(uint32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700184 // CHECK-LABEL: test_vminvq_u32
Jiangning Liu03916912013-10-05 08:22:55 +0000185 return vminvq_u32(a);
186 // CHECK: uminv {{s[0-9]+}}, {{v[0-9]+}}.4s
187}
188
189int8_t test_vaddv_s8(int8x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700190 // CHECK-LABEL: test_vaddv_s8
Jiangning Liu03916912013-10-05 08:22:55 +0000191 return vaddv_s8(a);
192 // CHECK: addv {{b[0-9]+}}, {{v[0-9]+}}.8b
193}
194
195int16_t test_vaddv_s16(int16x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700196 // CHECK-LABEL: test_vaddv_s16
Jiangning Liu03916912013-10-05 08:22:55 +0000197 return vaddv_s16(a);
198 // CHECK: addv {{h[0-9]+}}, {{v[0-9]+}}.4h
199}
200
201uint8_t test_vaddv_u8(uint8x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700202 // CHECK-LABEL: test_vaddv_u8
Jiangning Liu03916912013-10-05 08:22:55 +0000203 return vaddv_u8(a);
204 // CHECK: addv {{b[0-9]+}}, {{v[0-9]+}}.8b
205}
206
207uint16_t test_vaddv_u16(uint16x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700208 // CHECK-LABEL: test_vaddv_u16
Jiangning Liu03916912013-10-05 08:22:55 +0000209 return vaddv_u16(a);
210 // CHECK: addv {{h[0-9]+}}, {{v[0-9]+}}.4h
211}
212
213int8_t test_vaddvq_s8(int8x16_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700214 // CHECK-LABEL: test_vaddvq_s8
Jiangning Liu03916912013-10-05 08:22:55 +0000215 return vaddvq_s8(a);
216 // CHECK: addv {{b[0-9]+}}, {{v[0-9]+}}.16b
217}
218
219int16_t test_vaddvq_s16(int16x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700220 // CHECK-LABEL: test_vaddvq_s16
Jiangning Liu03916912013-10-05 08:22:55 +0000221 return vaddvq_s16(a);
222 // CHECK: addv {{h[0-9]+}}, {{v[0-9]+}}.8h
223}
224
225int32_t test_vaddvq_s32(int32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700226 // CHECK-LABEL: test_vaddvq_s32
Jiangning Liu03916912013-10-05 08:22:55 +0000227 return vaddvq_s32(a);
228 // CHECK: addv {{s[0-9]+}}, {{v[0-9]+}}.4s
229}
230
231uint8_t test_vaddvq_u8(uint8x16_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700232 // CHECK-LABEL: test_vaddvq_u8
Jiangning Liu03916912013-10-05 08:22:55 +0000233 return vaddvq_u8(a);
234 // CHECK: addv {{b[0-9]+}}, {{v[0-9]+}}.16b
235}
236
237uint16_t test_vaddvq_u16(uint16x8_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700238 // CHECK-LABEL: test_vaddvq_u16
Jiangning Liu03916912013-10-05 08:22:55 +0000239 return vaddvq_u16(a);
240 // CHECK: addv {{h[0-9]+}}, {{v[0-9]+}}.8h
241}
242
243uint32_t test_vaddvq_u32(uint32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700244 // CHECK-LABEL: test_vaddvq_u32
Jiangning Liu03916912013-10-05 08:22:55 +0000245 return vaddvq_u32(a);
246 // CHECK: addv {{s[0-9]+}}, {{v[0-9]+}}.4s
247}
248
249float32_t test_vmaxvq_f32(float32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700250 // CHECK-LABEL: test_vmaxvq_f32
Jiangning Liu03916912013-10-05 08:22:55 +0000251 return vmaxvq_f32(a);
252 // CHECK: fmaxv {{s[0-9]+}}, {{v[0-9]+}}.4s
253}
254
255float32_t test_vminvq_f32(float32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700256 // CHECK-LABEL: test_vminvq_f32
Jiangning Liu03916912013-10-05 08:22:55 +0000257 return vminvq_f32(a);
258 // CHECK: fminv {{s[0-9]+}}, {{v[0-9]+}}.4s
259}
260
261float32_t test_vmaxnmvq_f32(float32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700262 // CHECK-LABEL: test_vmaxnmvq_f32
Jiangning Liu03916912013-10-05 08:22:55 +0000263 return vmaxnmvq_f32(a);
264 // CHECK: fmaxnmv {{s[0-9]+}}, {{v[0-9]+}}.4s
265}
266
267float32_t test_vminnmvq_f32(float32x4_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700268 // CHECK-LABEL: test_vminnmvq_f32
Jiangning Liu03916912013-10-05 08:22:55 +0000269 return vminnmvq_f32(a);
270 // CHECK: fminnmv {{s[0-9]+}}, {{v[0-9]+}}.4s
271}