blob: c071147af216d0d0100198468d85f55591944725 [file] [log] [blame]
Kevin Qin84881a72013-11-14 06:49:00 +00001// REQUIRES: aarch64-registered-target
Stephen Hines651f13c2014-04-23 16:59:28 -07002// REQUIRES: arm64-registered-target
Kevin Qin84881a72013-11-14 06:49:00 +00003// RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +neon \
Stephen Hines651f13c2014-04-23 16:59:28 -07004// RUN: -ffp-contract=fast -S -O3 -o - %s | FileCheck %s --check-prefix=CHECK \
5// RUN: --check-prefix=CHECK-AARCH64
6// RUN: %clang_cc1 -triple arm64-none-linux-gnu \
7// RUN: -ffp-contract=fast -S -O3 -o - %s | FileCheck %s --check-prefix=CHECK \
8// RUN: --check-prefix=CHECK-ARM64
Kevin Qin84881a72013-11-14 06:49:00 +00009
10// Test new aarch64 intrinsics with poly64
11
12#include <arm_neon.h>
13
14uint64x1_t test_vceq_p64(poly64x1_t a, poly64x1_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -070015 // CHECK-LABEL: test_vceq_p64
Kevin Qin84881a72013-11-14 06:49:00 +000016 return vceq_p64(a, b);
17 // CHECK: cmeq {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
18}
19
20uint64x2_t test_vceqq_p64(poly64x2_t a, poly64x2_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -070021 // CHECK-LABEL: test_vceqq_p64
Kevin Qin84881a72013-11-14 06:49:00 +000022 return vceqq_p64(a, b);
23 // CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
24}
25
26uint64x1_t test_vtst_p64(poly64x1_t a, poly64x1_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -070027 // CHECK-LABEL: test_vtst_p64
Kevin Qin84881a72013-11-14 06:49:00 +000028 return vtst_p64(a, b);
29 // CHECK: cmtst {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
30}
31
32uint64x2_t test_vtstq_p64(poly64x2_t a, poly64x2_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -070033 // CHECK-LABEL: test_vtstq_p64
Kevin Qin84881a72013-11-14 06:49:00 +000034 return vtstq_p64(a, b);
35 // CHECK: cmtst {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
36}
37
38poly64x1_t test_vbsl_p64(poly64x1_t a, poly64x1_t b, poly64x1_t c) {
Stephen Hines651f13c2014-04-23 16:59:28 -070039 // CHECK-LABEL: test_vbsl_p64
Kevin Qin84881a72013-11-14 06:49:00 +000040 return vbsl_p64(a, b, c);
41 // CHECK: bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
42}
43
44poly64x2_t test_vbslq_p64(poly64x2_t a, poly64x2_t b, poly64x2_t c) {
Stephen Hines651f13c2014-04-23 16:59:28 -070045 // CHECK-LABEL: test_vbslq_p64
Kevin Qin84881a72013-11-14 06:49:00 +000046 return vbslq_p64(a, b, c);
47 // CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
48}
49
50poly64_t test_vget_lane_p64(poly64x1_t v) {
Stephen Hines651f13c2014-04-23 16:59:28 -070051 // CHECK-LABEL: test_vget_lane_p64
Kevin Qin84881a72013-11-14 06:49:00 +000052 return vget_lane_p64(v, 0);
53 // CHECK: fmov {{x[0-9]+}}, {{d[0-9]+}}
54}
55
56poly64_t test_vgetq_lane_p64(poly64x2_t v) {
Stephen Hines651f13c2014-04-23 16:59:28 -070057 // CHECK-LABEL: test_vgetq_lane_p64
Kevin Qin84881a72013-11-14 06:49:00 +000058 return vgetq_lane_p64(v, 1);
59 // CHECK: umov {{x[0-9]+}}, {{v[0-9]+}}.d[1]
60}
61
62poly64x1_t test_vset_lane_p64(poly64_t a, poly64x1_t v) {
Stephen Hines651f13c2014-04-23 16:59:28 -070063 // CHECK-LABEL: test_vset_lane_p64
Kevin Qin84881a72013-11-14 06:49:00 +000064 return vset_lane_p64(a, v, 0);
65 // CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}}
66}
67
68poly64x2_t test_vsetq_lane_p64(poly64_t a, poly64x2_t v) {
Stephen Hines651f13c2014-04-23 16:59:28 -070069 // CHECK-LABEL: test_vsetq_lane_p64
Kevin Qin84881a72013-11-14 06:49:00 +000070 return vsetq_lane_p64(a, v, 1);
71 // CHECK: ins {{v[0-9]+}}.d[1], {{x[0-9]+}}
72}
73
74poly64x1_t test_vcopy_lane_p64(poly64x1_t a, poly64x1_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -070075 // CHECK-LABEL: test_vcopy_lane_p64
Kevin Qin84881a72013-11-14 06:49:00 +000076 return vcopy_lane_p64(a, 0, b, 0);
Stephen Hines651f13c2014-04-23 16:59:28 -070077 // CHECK-AARCH64: fmov {{d[0-9]+}}, {{d[0-9]+}}
78
79 // CHECK-ARM64: orr v0.16b, v1.16b, v1.16b
Kevin Qin84881a72013-11-14 06:49:00 +000080}
81
82poly64x2_t test_vcopyq_lane_p64(poly64x2_t a, poly64x1_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -070083 // CHECK-LABEL: test_vcopyq_lane_p64
Kevin Qin84881a72013-11-14 06:49:00 +000084 return vcopyq_lane_p64(a, 1, b, 0);
85 // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
86}
87
88poly64x2_t test_vcopyq_laneq_p64(poly64x2_t a, poly64x2_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -070089 // CHECK-LABEL: test_vcopyq_laneq_p64
Kevin Qin84881a72013-11-14 06:49:00 +000090 return vcopyq_laneq_p64(a, 1, b, 1);
Stephen Hines651f13c2014-04-23 16:59:28 -070091 // CHECK-AARCH64: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[1]
Kevin Qin84881a72013-11-14 06:49:00 +000092}
93
94poly64x1_t test_vcreate_p64(uint64_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -070095 // CHECK-LABEL: test_vcreate_p64
Kevin Qin84881a72013-11-14 06:49:00 +000096 return vcreate_p64(a);
97 // CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}}
98}
99
100poly64x1_t test_vdup_n_p64(poly64_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700101 // CHECK-LABEL: test_vdup_n_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000102 return vdup_n_p64(a);
103 // CHECK: fmov {{d[0-9]+}}, {{x[0-9]+}}
104}
105poly64x2_t test_vdupq_n_p64(poly64_t a) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700106 // CHECK-LABEL: test_vdupq_n_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000107 return vdupq_n_p64(a);
108 // CHECK: dup {{v[0-9]+}}.2d, {{x[0-9]+}}
109}
110
111poly64x1_t test_vdup_lane_p64(poly64x1_t vec) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700112 // CHECK-LABEL: test_vdup_lane_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000113 return vdup_lane_p64(vec, 0);
114 // CHECK: ret
115}
116
117poly64x2_t test_vdupq_lane_p64(poly64x1_t vec) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700118 // CHECK-LABEL: test_vdupq_lane_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000119 return vdupq_lane_p64(vec, 0);
120 // CHECK: dup {{v[0-9]+}}.2d, {{v[0-9]+}}.d[0]
121}
122
123poly64x2_t test_vdupq_laneq_p64(poly64x2_t vec) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700124 // CHECK-LABEL: test_vdupq_laneq_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000125 return vdupq_laneq_p64(vec, 1);
126 // CHECK: dup {{v[0-9]+}}.2d, {{v[0-9]+}}.d[1]
127}
128
129poly64x2_t test_vcombine_p64(poly64x1_t low, poly64x1_t high) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700130 // CHECK-LABEL: test_vcombine_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000131 return vcombine_p64(low, high);
132 // CHECK: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
133}
134
135poly64x1_t test_vld1_p64(poly64_t const * ptr) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700136 // CHECK-LABEL: test_vld1_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000137 return vld1_p64(ptr);
Stephen Hines651f13c2014-04-23 16:59:28 -0700138 // CHECK-AARCH64: ld1 {{{v[0-9]+}}.1d}, [{{x[0-9]+|sp}}]
139 // CHECK-ARM64: ldr {{d[0-9]+}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000140}
141
142poly64x2_t test_vld1q_p64(poly64_t const * ptr) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700143 // CHECK-LABEL: test_vld1q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000144 return vld1q_p64(ptr);
Stephen Hines651f13c2014-04-23 16:59:28 -0700145 // CHECK-AARCH64: ld1 {{{v[0-9]+}}.2d}, [{{x[0-9]+|sp}}]
146 // CHECK-ARM64: ldr {{q[0-9]+}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000147}
148
149void test_vst1_p64(poly64_t * ptr, poly64x1_t val) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700150 // CHECK-LABEL: test_vst1_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000151 return vst1_p64(ptr, val);
Stephen Hines651f13c2014-04-23 16:59:28 -0700152 // CHECK-AARCH64: st1 {{{v[0-9]+}}.1d}, [{{x[0-9]+|sp}}]
153 // CHECK-ARM64: str {{d[0-9]+}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000154}
155
156void test_vst1q_p64(poly64_t * ptr, poly64x2_t val) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700157 // CHECK-LABEL: test_vst1q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000158 return vst1q_p64(ptr, val);
Stephen Hines651f13c2014-04-23 16:59:28 -0700159 // CHECK-AARCH64: st1 {{{v[0-9]+}}.2d}, [{{x[0-9]+|sp}}]
160 // CHECK-ARM64: str {{q[0-9]+}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000161}
162
163poly64x1x2_t test_vld2_p64(poly64_t const * ptr) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700164 // CHECK-LABEL: test_vld2_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000165 return vld2_p64(ptr);
Stephen Hines651f13c2014-04-23 16:59:28 -0700166 // CHECK: ld1 {{{ *v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000167}
168
169poly64x2x2_t test_vld2q_p64(poly64_t const * ptr) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700170 // CHECK-LABEL: test_vld2q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000171 return vld2q_p64(ptr);
Stephen Hines651f13c2014-04-23 16:59:28 -0700172 // CHECK: ld2 {{{ *v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000173}
174
175poly64x1x3_t test_vld3_p64(poly64_t const * ptr) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700176 // CHECK-LABEL: test_vld3_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000177 return vld3_p64(ptr);
Stephen Hines651f13c2014-04-23 16:59:28 -0700178 // CHECK: ld1 {{{ *v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000179}
180
181poly64x2x3_t test_vld3q_p64(poly64_t const * ptr) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700182 // CHECK-LABEL: test_vld3q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000183 return vld3q_p64(ptr);
Stephen Hines651f13c2014-04-23 16:59:28 -0700184 // CHECK: ld3 {{{ *v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000185}
186
187poly64x1x4_t test_vld4_p64(poly64_t const * ptr) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700188 // CHECK-LABEL: test_vld4_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000189 return vld4_p64(ptr);
Stephen Hines651f13c2014-04-23 16:59:28 -0700190 // CHECK: ld1 {{{ *v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000191}
192
193poly64x2x4_t test_vld4q_p64(poly64_t const * ptr) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700194 // CHECK-LABEL: test_vld4q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000195 return vld4q_p64(ptr);
Stephen Hines651f13c2014-04-23 16:59:28 -0700196 // CHECK: ld4 {{{ *v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000197}
198
199void test_vst2_p64(poly64_t * ptr, poly64x1x2_t val) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700200 // CHECK-LABEL: test_vst2_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000201 return vst2_p64(ptr, val);
Stephen Hines651f13c2014-04-23 16:59:28 -0700202 // CHECK: st1 {{{ *v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000203}
204
205void test_vst2q_p64(poly64_t * ptr, poly64x2x2_t val) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700206 // CHECK-LABEL: test_vst2q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000207 return vst2q_p64(ptr, val);
Stephen Hines651f13c2014-04-23 16:59:28 -0700208 // CHECK: st2 {{{ *v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000209}
210
211void test_vst3_p64(poly64_t * ptr, poly64x1x3_t val) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700212 // CHECK-LABEL: test_vst3_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000213 return vst3_p64(ptr, val);
Stephen Hines651f13c2014-04-23 16:59:28 -0700214 // CHECK: st1 {{{ *v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000215}
216
217void test_vst3q_p64(poly64_t * ptr, poly64x2x3_t val) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700218 // CHECK-LABEL: test_vst3q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000219 return vst3q_p64(ptr, val);
Stephen Hines651f13c2014-04-23 16:59:28 -0700220 // CHECK: st3 {{{ *v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000221}
222
223void test_vst4_p64(poly64_t * ptr, poly64x1x4_t val) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700224 // CHECK-LABEL: test_vst4_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000225 return vst4_p64(ptr, val);
Stephen Hines651f13c2014-04-23 16:59:28 -0700226 // CHECK: st1 {{{ *v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d, v[0-9]+.1d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000227}
228
229void test_vst4q_p64(poly64_t * ptr, poly64x2x4_t val) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700230 // CHECK-LABEL: test_vst4q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000231 return vst4q_p64(ptr, val);
Stephen Hines651f13c2014-04-23 16:59:28 -0700232 // CHECK: st4 {{{ *v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d, v[0-9]+.2d *}}}, [{{x[0-9]+|sp}}]
Kevin Qin84881a72013-11-14 06:49:00 +0000233}
234
235poly64x1_t test_vext_p64(poly64x1_t a, poly64x1_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700236 // CHECK-LABEL: test_vext_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000237 return vext_u64(a, b, 0);
238
239}
240
241poly64x2_t test_vextq_p64(poly64x2_t a, poly64x2_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700242 // CHECK-LABEL: test_vextq_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000243 return vextq_p64(a, b, 1);
Stephen Hines651f13c2014-04-23 16:59:28 -0700244 // CHECK: ext {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{#0x8|#8}}
Kevin Qin84881a72013-11-14 06:49:00 +0000245}
246
247poly64x2_t test_vzip1q_p64(poly64x2_t a, poly64x2_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700248 // CHECK-LABEL: test_vzip1q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000249 return vzip1q_p64(a, b);
Stephen Hines651f13c2014-04-23 16:59:28 -0700250 // CHECK-AARCH64: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
251 // CHECK-ARM64: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
Kevin Qin84881a72013-11-14 06:49:00 +0000252}
253
254poly64x2_t test_vzip2q_p64(poly64x2_t a, poly64x2_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700255 // CHECK-LABEL: test_vzip2q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000256 return vzip2q_u64(a, b);
Stephen Hines651f13c2014-04-23 16:59:28 -0700257 // CHECK-AARCH64: ins {{v[0-9]+}}.d[0], {{v[0-9]+}}.d[1]
258 // CHECK-ARM64: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
Kevin Qin84881a72013-11-14 06:49:00 +0000259}
260
261poly64x2_t test_vuzp1q_p64(poly64x2_t a, poly64x2_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700262 // CHECK-LABEL: test_vuzp1q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000263 return vuzp1q_p64(a, b);
Stephen Hines651f13c2014-04-23 16:59:28 -0700264 // CHECK-AARCH64: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
265 // CHECK-ARM64: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
Kevin Qin84881a72013-11-14 06:49:00 +0000266}
267
268poly64x2_t test_vuzp2q_p64(poly64x2_t a, poly64x2_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700269 // CHECK-LABEL: test_vuzp2q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000270 return vuzp2q_u64(a, b);
Stephen Hines651f13c2014-04-23 16:59:28 -0700271 // CHECK-AARCH64: ins {{v[0-9]+}}.d[0], {{v[0-9]+}}.d[1]
272 // CHECK-ARM64: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
Kevin Qin84881a72013-11-14 06:49:00 +0000273}
274
275poly64x2_t test_vtrn1q_p64(poly64x2_t a, poly64x2_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700276 // CHECK-LABEL: test_vtrn1q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000277 return vtrn1q_p64(a, b);
Stephen Hines651f13c2014-04-23 16:59:28 -0700278 // CHECK-AARCH64: ins {{v[0-9]+}}.d[1], {{v[0-9]+}}.d[0]
279 // CHECK-ARM64: zip1 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
Kevin Qin84881a72013-11-14 06:49:00 +0000280}
281
282poly64x2_t test_vtrn2q_p64(poly64x2_t a, poly64x2_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700283 // CHECK-LABEL: test_vtrn2q_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000284 return vtrn2q_u64(a, b);
Stephen Hines651f13c2014-04-23 16:59:28 -0700285 // CHECK-AARCH64: ins {{v[0-9]+}}.d[0], {{v[0-9]+}}.d[1]
286 // CHECK-ARM64: zip2 {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
Kevin Qin84881a72013-11-14 06:49:00 +0000287}
288
289poly64x1_t test_vsri_n_p64(poly64x1_t a, poly64x1_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700290 // CHECK-LABEL: test_vsri_n_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000291 return vsri_n_p64(a, b, 33);
292 // CHECK: sri {{d[0-9]+}}, {{d[0-9]+}}, #33
293}
294
295poly64x2_t test_vsriq_n_p64(poly64x2_t a, poly64x2_t b) {
Stephen Hines651f13c2014-04-23 16:59:28 -0700296 // CHECK-LABEL: test_vsriq_n_p64
Kevin Qin84881a72013-11-14 06:49:00 +0000297 return vsriq_n_p64(a, b, 64);
298 // CHECK: sri {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #64
299}
300