16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -triple arm64-apple-ios7.0 -target-feature +neon -ffreestanding -Os -S -o - %s | FileCheck %s
2c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// REQUIRES: aarch64-registered-target
3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include <arm_neon.h>
5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vaddw_high_s8(int16x8_t lhs, int8x16_t rhs) {
7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: saddw2.8h
8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddw_high_s8(lhs, rhs);
9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vaddw_high_s16(int32x4_t lhs, int16x8_t rhs) {
12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: saddw2.4s
13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddw_high_s16(lhs, rhs);
14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vaddw_high_s32(int64x2_t lhs, int32x4_t rhs) {
17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: saddw2.2d
18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddw_high_s32(lhs, rhs);
19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vaddw_high_u8(uint16x8_t lhs, uint8x16_t rhs) {
22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uaddw2.8h
23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddw_high_u8(lhs, rhs);
24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vaddw_high_u16(uint32x4_t lhs, uint16x8_t rhs) {
27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uaddw2.4s
28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddw_high_u16(lhs, rhs);
29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2_t test_vaddw_high_u32(uint64x2_t lhs, uint32x4_t rhs) {
32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uaddw2.2d
33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddw_high_u32(lhs, rhs);
34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vsubw_high_s8(int16x8_t lhs, int8x16_t rhs) {
37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: ssubw2.8h
38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubw_high_s8(lhs, rhs);
39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vsubw_high_s16(int32x4_t lhs, int16x8_t rhs) {
42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: ssubw2.4s
43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubw_high_s16(lhs, rhs);
44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vsubw_high_s32(int64x2_t lhs, int32x4_t rhs) {
47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: ssubw2.2d
48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubw_high_s32(lhs, rhs);
49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vsubw_high_u8(uint16x8_t lhs, uint8x16_t rhs) {
52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: usubw2.8h
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubw_high_u8(lhs, rhs);
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vsubw_high_u16(uint32x4_t lhs, uint16x8_t rhs) {
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: usubw2.4s
58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubw_high_u16(lhs, rhs);
59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2_t test_vsubw_high_u32(uint64x2_t lhs, uint32x4_t rhs) {
62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: usubw2.2d
63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubw_high_u32(lhs, rhs);
64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vabdl_high_s8(int8x16_t lhs, int8x16_t rhs) {
67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sabdl2.8h
68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabdl_high_s8(lhs, rhs);
69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vabdl_high_s16(int16x8_t lhs, int16x8_t rhs) {
72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sabdl2.4s
73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabdl_high_s16(lhs, rhs);
74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vabdl_high_s32(int32x4_t lhs, int32x4_t rhs) {
77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sabdl2.2d
78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabdl_high_s32(lhs, rhs);
79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vabdl_high_u8(uint8x16_t lhs, uint8x16_t rhs) {
82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uabdl2.8h
83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabdl_high_u8(lhs, rhs);
84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vabdl_high_u16(uint16x8_t lhs, uint16x8_t rhs) {
87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uabdl2.4s
88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabdl_high_u16(lhs, rhs);
89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2_t test_vabdl_high_u32(uint32x4_t lhs, uint32x4_t rhs) {
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uabdl2.2d
93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabdl_high_u32(lhs, rhs);
94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
96651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vabal_high_s8(int16x8_t accum, int8x16_t lhs, int8x16_t rhs) {
97651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sabal2.8h
98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabal_high_s8(accum, lhs, rhs);
99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
101651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vabal_high_s16(int32x4_t accum, int16x8_t lhs, int16x8_t rhs) {
102651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sabal2.4s
103651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabal_high_s16(accum, lhs, rhs);
104651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
105651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
106651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vabal_high_s32(int64x2_t accum, int32x4_t lhs, int32x4_t rhs) {
107651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sabal2.2d
108651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabal_high_s32(accum, lhs, rhs);
109651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
110651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
111651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vabal_high_u8(uint16x8_t accum, uint8x16_t lhs, uint8x16_t rhs) {
112651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uabal2.8h
113651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabal_high_u8(accum, lhs, rhs);
114651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
116651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vabal_high_u16(uint32x4_t accum, uint16x8_t lhs, uint16x8_t rhs) {
117651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uabal2.4s
118651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabal_high_u16(accum, lhs, rhs);
119651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
120651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
121651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2_t test_vabal_high_u32(uint64x2_t accum, uint32x4_t lhs, uint32x4_t rhs) {
122651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uabal2.2d
123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vabal_high_u32(accum, lhs, rhs);
124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vqdmlal_high_s16(int32x4_t accum, int16x8_t lhs, int16x8_t rhs) {
127651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqdmlal2.4s
128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqdmlal_high_s16(accum, lhs, rhs);
129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
131651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vqdmlal_high_s32(int64x2_t accum, int32x4_t lhs, int32x4_t rhs) {
132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqdmlal2.2d
133651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqdmlal_high_s32(accum, lhs, rhs);
134651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
135651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
136651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vqdmlsl_high_s16(int32x4_t accum, int16x8_t lhs, int16x8_t rhs) {
137651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqdmlsl2.4s
138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqdmlsl_high_s16(accum, lhs, rhs);
139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
140651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
141651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vqdmlsl_high_s32(int64x2_t accum, int32x4_t lhs, int32x4_t rhs) {
142651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqdmlsl2.2d
143651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqdmlsl_high_s32(accum, lhs, rhs);
144651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
145651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
146651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vqdmull_high_s16(int16x8_t lhs, int16x8_t rhs) {
147651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqdmull2.4s
148651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqdmull_high_s16(lhs, rhs);
149651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
150651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
151651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vqdmull_high_s32(int32x4_t lhs, int32x4_t rhs) {
152651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqdmull2.2d
153651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqdmull_high_s32(lhs, rhs);
154651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
155651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
156651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vshll_high_n_s8(int8x16_t in) {
157651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sshll2.8h
158651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_s8(in, 7);
159651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
160651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vshll_high_n_s16(int16x8_t in) {
162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sshll2.4s
163651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_s16(in, 15);
164651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
165651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
166651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vshll_high_n_s32(int32x4_t in) {
167651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sshll2.2d
168651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_s32(in, 31);
169651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
170651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
171651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vshll_high_n_u8(int8x16_t in) {
172651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: ushll2.8h
173651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_u8(in, 7);
174651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
176651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vshll_high_n_u16(int16x8_t in) {
177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: ushll2.4s
178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_u16(in, 15);
179651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
180651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
181651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vshll_high_n_u32(int32x4_t in) {
182651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: ushll2.2d
183651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_u32(in, 31);
184651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
185651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
186651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vshll_high_n_s8_max(int8x16_t in) {
187651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shll2.8h
188651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_s8(in, 8);
189651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
190651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vshll_high_n_s16_max(int16x8_t in) {
192651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shll2.4s
193651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_s16(in, 16);
194651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
195651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vshll_high_n_s32_max(int32x4_t in) {
197651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shll2.2d
198651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_s32(in, 32);
199651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
200651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
201651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vshll_high_n_u8_max(int8x16_t in) {
202651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shll2.8h
203651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_u8(in, 8);
204651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
205651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
206651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vshll_high_n_u16_max(int16x8_t in) {
207651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shll2.4s
208651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_u16(in, 16);
209651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
210651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
211651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vshll_high_n_u32_max(int32x4_t in) {
212651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shll2.2d
213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshll_high_n_u32(in, 32);
214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
215651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
216651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vsubl_high_s8(int8x16_t lhs, int8x16_t rhs) {
217651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: ssubl2.8h
218651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubl_high_s8(lhs, rhs);
219651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
220651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
221651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vsubl_high_s16(int16x8_t lhs, int16x8_t rhs) {
222651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: ssubl2.4s
223651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubl_high_s16(lhs, rhs);
224651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
225651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
226651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint64x2_t test_vsubl_high_s32(int32x4_t lhs, int32x4_t rhs) {
227651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: ssubl2.2d
228651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubl_high_s32(lhs, rhs);
229651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
230651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
231651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vsubl_high_u8(uint8x16_t lhs, uint8x16_t rhs) {
232651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: usubl2.8h
233651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubl_high_u8(lhs, rhs);
234651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
235651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
236651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vsubl_high_u16(uint16x8_t lhs, uint16x8_t rhs) {
237651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: usubl2.4s
238651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubl_high_u16(lhs, rhs);
239651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
240651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
241651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint64x2_t test_vsubl_high_u32(uint32x4_t lhs, uint32x4_t rhs) {
242651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: usubl2.2d
243651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vsubl_high_u32(lhs, rhs);
244651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
245651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
246651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vrshrn_high_n_s16(int8x8_t lowpart, int16x8_t input) {
247651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: rshrn2.16b
248651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrn_high_n_s16(lowpart, input, 2);
249651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
250651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
251651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vrshrn_high_n_s32(int16x4_t lowpart, int32x4_t input) {
252651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: rshrn2.8h
253651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrn_high_n_s32(lowpart, input, 2);
254651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
255651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
256651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vrshrn_high_n_s64(int32x2_t lowpart, int64x2_t input) {
257651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shrn2.4s
258651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrn_high_n_s64(lowpart, input, 2);
259651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
260651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
261651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vrshrn_high_n_u16(uint8x8_t lowpart, uint16x8_t input) {
262651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: rshrn2.16b
263651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrn_high_n_u16(lowpart, input, 2);
264651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
265651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
266651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vrshrn_high_n_u32(uint16x4_t lowpart, uint32x4_t input) {
267651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: rshrn2.8h
268651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrn_high_n_u32(lowpart, input, 2);
269651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
270651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vrshrn_high_n_u64(uint32x2_t lowpart, uint64x2_t input) {
272651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: rshrn2.4s
273651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vrshrn_high_n_u64(lowpart, input, 2);
274651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
275651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
276651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vshrn_high_n_s16(int8x8_t lowpart, int16x8_t input) {
277651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shrn2.16b
278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshrn_high_n_s16(lowpart, input, 2);
279651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
280651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
281651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vshrn_high_n_s32(int16x4_t lowpart, int32x4_t input) {
282651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shrn2.8h
283651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshrn_high_n_s32(lowpart, input, 2);
284651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
285651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
286651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vshrn_high_n_s64(int32x2_t lowpart, int64x2_t input) {
287651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shrn2.4s
288651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshrn_high_n_s64(lowpart, input, 2);
289651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
290651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
291651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vshrn_high_n_u16(uint8x8_t lowpart, uint16x8_t input) {
292651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shrn2.16b
293651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshrn_high_n_u16(lowpart, input, 2);
294651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
295651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
296651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vshrn_high_n_u32(uint16x4_t lowpart, uint32x4_t input) {
297651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shrn2.8h
298651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshrn_high_n_u32(lowpart, input, 2);
299651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
300651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
301651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vshrn_high_n_u64(uint32x2_t lowpart, uint64x2_t input) {
302651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: shrn2.4s
303651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vshrn_high_n_u64(lowpart, input, 2);
304651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
305651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
306651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vqshrun_high_n_s16(uint8x8_t lowpart, int16x8_t input) {
307651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqshrun2.16b
308651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshrun_high_n_s16(lowpart, input, 2);
309651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
310651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
311651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vqshrun_high_n_s32(uint16x4_t lowpart, int32x4_t input) {
312651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqshrun2.8h
313651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshrun_high_n_s32(lowpart, input, 2);
314651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
315651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
316651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vqshrun_high_n_s64(uint32x2_t lowpart, int64x2_t input) {
317651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqshrun2.4s
318651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshrun_high_n_s64(lowpart, input, 2);
319651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
320651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
321651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vqrshrun_high_n_s16(uint8x8_t lowpart, int16x8_t input) {
322651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqrshrun2.16b
323651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqrshrun_high_n_s16(lowpart, input, 2);
324651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
325651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
326651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vqrshrun_high_n_s32(uint16x4_t lowpart, int32x4_t input) {
327651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqrshrun2.8h
328651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqrshrun_high_n_s32(lowpart, input, 2);
329651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
330651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
331651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vqrshrun_high_n_s64(uint32x2_t lowpart, int64x2_t input) {
332651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqrshrun2.4s
333651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqrshrun_high_n_s64(lowpart, input, 2);
334651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
335651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
336651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vqshrn_high_n_s16(int8x8_t lowpart, int16x8_t input) {
337651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqshrn2.16b
338651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshrn_high_n_s16(lowpart, input, 2);
339651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
340651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
341651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vqshrn_high_n_s32(int16x4_t lowpart, int32x4_t input) {
342651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqshrn2.8h
343651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshrn_high_n_s32(lowpart, input, 2);
344651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
345651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
346651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vqshrn_high_n_s64(int32x2_t lowpart, int64x2_t input) {
347651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqshrn2.4s
348651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshrn_high_n_s64(lowpart, input, 2);
349651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
350651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
351651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vqshrn_high_n_u16(uint8x8_t lowpart, uint16x8_t input) {
352651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uqshrn2.16b
353651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshrn_high_n_u16(lowpart, input, 2);
354651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
355651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
356651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vqshrn_high_n_u32(uint16x4_t lowpart, uint32x4_t input) {
357651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uqshrn2.8h
358651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshrn_high_n_u32(lowpart, input, 2);
359651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
360651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
361651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vqshrn_high_n_u64(uint32x2_t lowpart, uint64x2_t input) {
362651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uqshrn2.4s
363651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqshrn_high_n_u64(lowpart, input, 2);
364651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
365651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
366651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vqrshrn_high_n_s16(int8x8_t lowpart, int16x8_t input) {
367651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqrshrn2.16b
368651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqrshrn_high_n_s16(lowpart, input, 2);
369651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
370651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
371651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vqrshrn_high_n_s32(int16x4_t lowpart, int32x4_t input) {
372651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqrshrn2.8h
373651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqrshrn_high_n_s32(lowpart, input, 2);
374651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
375651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
376651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vqrshrn_high_n_s64(int32x2_t lowpart, int64x2_t input) {
377651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqrshrn2.4s
378651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqrshrn_high_n_s64(lowpart, input, 2);
379651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
380651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
381651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vqrshrn_high_n_u16(uint8x8_t lowpart, uint16x8_t input) {
382651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uqrshrn2.16b
383651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqrshrn_high_n_u16(lowpart, input, 2);
384651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
385651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
386651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vqrshrn_high_n_u32(uint16x4_t lowpart, uint32x4_t input) {
387651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uqrshrn2.8h
388651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqrshrn_high_n_u32(lowpart, input, 2);
389651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
390651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
391651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vqrshrn_high_n_u64(uint32x2_t lowpart, uint64x2_t input) {
392651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uqrshrn2.4s
393651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqrshrn_high_n_u64(lowpart, input, 2);
394651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
395651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
396651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vaddhn_high_s16(int8x8_t lowpart, int16x8_t lhs, int16x8_t rhs) {
3973ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: addhn2.16b v0, {{v1, v2|v2, v1}}
398651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddhn_high_s16(lowpart, lhs, rhs);
399651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
400651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
401651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vaddhn_high_s32(int16x4_t lowpart, int32x4_t lhs, int32x4_t rhs) {
4023ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: addhn2.8h v0, {{v1, v2|v2, v1}}
403651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddhn_high_s32(lowpart, lhs, rhs);
404651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
405651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
406651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vaddhn_high_s64(int32x2_t lowpart, int64x2_t lhs, int64x2_t rhs) {
4073ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: addhn2.4s v0, {{v1, v2|v2, v1}}
408651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddhn_high_s64(lowpart, lhs, rhs);
409651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
410651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
411651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vaddhn_high_u16(uint8x8_t lowpart, uint16x8_t lhs, uint16x8_t rhs) {
4123ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: addhn2.16b v0, {{v1, v2|v2, v1}}
413651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddhn_high_s16(lowpart, lhs, rhs);
414651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
415651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
416651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vaddhn_high_u32(uint16x4_t lowpart, uint32x4_t lhs, uint32x4_t rhs) {
4173ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: addhn2.8h v0, {{v1, v2|v2, v1}}
418651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddhn_high_s32(lowpart, lhs, rhs);
419651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
420651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
421651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vaddhn_high_u64(uint32x2_t lowpart, uint64x2_t lhs, uint64x2_t rhs) {
4223ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: addhn2.4s v0, {{v1, v2|v2, v1}}
423651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vaddhn_high_s64(lowpart, lhs, rhs);
424651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
425651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
426651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vraddhn_high_s16(int8x8_t lowpart, int16x8_t lhs, int16x8_t rhs) {
427651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: raddhn2.16b v0, v1, v2
428651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vraddhn_high_s16(lowpart, lhs, rhs);
429651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
430651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
431651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vraddhn_high_s32(int16x4_t lowpart, int32x4_t lhs, int32x4_t rhs) {
432651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: raddhn2.8h v0, v1, v2
433651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vraddhn_high_s32(lowpart, lhs, rhs);
434651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
435651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
436651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vraddhn_high_s64(int32x2_t lowpart, int64x2_t lhs, int64x2_t rhs) {
437651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: raddhn2.4s v0, v1, v2
438651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vraddhn_high_s64(lowpart, lhs, rhs);
439651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
440651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
441651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vraddhn_high_u16(uint8x8_t lowpart, uint16x8_t lhs, uint16x8_t rhs) {
442651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: raddhn2.16b v0, v1, v2
443651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vraddhn_high_s16(lowpart, lhs, rhs);
444651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
445651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
446651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vraddhn_high_u32(uint16x4_t lowpart, uint32x4_t lhs, uint32x4_t rhs) {
447651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: raddhn2.8h v0, v1, v2
448651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vraddhn_high_s32(lowpart, lhs, rhs);
449651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
450651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
451651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vraddhn_high_u64(uint32x2_t lowpart, uint64x2_t lhs, uint64x2_t rhs) {
452651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: raddhn2.4s v0, v1, v2
453651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vraddhn_high_s64(lowpart, lhs, rhs);
454651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
455651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
456651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vmovn_high_s16(int8x8_t lowpart, int16x8_t wide) {
457651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: xtn2.16b v0, v1
458651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vmovn_high_s16(lowpart, wide);
459651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
460651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
461651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vmovn_high_s32(int16x4_t lowpart, int32x4_t wide) {
462651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: xtn2.8h v0, v1
463651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vmovn_high_s32(lowpart, wide);
464651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
465651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
466651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vmovn_high_s64(int32x2_t lowpart, int64x2_t wide) {
467651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: xtn2.4s v0, v1
468651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vmovn_high_s64(lowpart, wide);
469651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
470651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
471651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vmovn_high_u16(uint8x8_t lowpart, uint16x8_t wide) {
472651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: xtn2.16b v0, v1
473651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vmovn_high_u16(lowpart, wide);
474651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
475651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
476651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vmovn_high_u32(uint16x4_t lowpart, uint32x4_t wide) {
477651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: xtn2.8h v0, v1
478651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vmovn_high_u32(lowpart, wide);
479651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
480651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
481651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vmovn_high_u64(uint32x2_t lowpart, uint64x2_t wide) {
482651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: xtn2.4s v0, v1
483651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vmovn_high_u64(lowpart, wide);
484651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
485651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
486651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint8x16_t test_vqmovn_high_s16(int8x8_t lowpart, int16x8_t wide) {
487651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqxtn2.16b v0, v1
488651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqmovn_high_s16(lowpart, wide);
489651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
490651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
491651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint16x8_t test_vqmovn_high_s32(int16x4_t lowpart, int32x4_t wide) {
492651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqxtn2.8h v0, v1
493651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqmovn_high_s32(lowpart, wide);
494651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
495651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
496651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesint32x4_t test_vqmovn_high_s64(int32x2_t lowpart, int64x2_t wide) {
497651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqxtn2.4s v0, v1
498651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqmovn_high_s64(lowpart, wide);
499651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
500651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
501651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vqmovn_high_u16(uint8x8_t lowpart, int16x8_t wide) {
502651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uqxtn2.16b v0, v1
503651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqmovn_high_u16(lowpart, wide);
504651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
505651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
506651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vqmovn_high_u32(uint16x4_t lowpart, int32x4_t wide) {
507651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uqxtn2.8h v0, v1
508651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqmovn_high_u32(lowpart, wide);
509651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
510651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
511651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vqmovn_high_u64(uint32x2_t lowpart, int64x2_t wide) {
512651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: uqxtn2.4s v0, v1
513651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqmovn_high_u64(lowpart, wide);
514651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
515651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
516651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint8x16_t test_vqmovun_high_s16(uint8x8_t lowpart, int16x8_t wide) {
517651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqxtun2.16b v0, v1
518651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqmovun_high_s16(lowpart, wide);
519651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
520651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
521651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint16x8_t test_vqmovun_high_s32(uint16x4_t lowpart, int32x4_t wide) {
522651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqxtun2.8h v0, v1
523651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqmovun_high_s32(lowpart, wide);
524651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
525651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
526651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesuint32x4_t test_vqmovun_high_s64(uint32x2_t lowpart, int64x2_t wide) {
527651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: sqxtun2.4s v0, v1
528651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vqmovun_high_s64(lowpart, wide);
529651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
530651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
531651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesfloat32x4_t test_vcvtx_high_f32_f64(float32x2_t lowpart, float64x2_t wide) {
532651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: fcvtxn2 v0.4s, v1.2d
533651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vcvtx_high_f32_f64(lowpart, wide);
534651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
535651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
536651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesfloat64x2_t test_vcvt_f64_f32(float32x2_t x) {
537651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: fcvtl v0.2d, v0.2s
538651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vcvt_f64_f32(x);
539651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
540651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
541651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesfloat64x2_t test_vcvt_high_f64_f32(float32x4_t x) {
542651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: fcvtl2 v0.2d, v0.4s
543651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vcvt_high_f64_f32(x);
544651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
545651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
546651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesfloat32x2_t test_vcvt_f32_f64(float64x2_t v) {
547651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: fcvtn v0.2s, v0.2d
548651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vcvt_f32_f64(v);
549651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
550651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
551651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesfloat32x4_t test_vcvt_high_f32_f64(float32x2_t x, float64x2_t v) {
552651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: fcvtn2 v0.4s, v1.2d
553651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vcvt_high_f32_f64(x, v);
554651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
555651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
556651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesfloat32x2_t test_vcvtx_f32_f64(float64x2_t v) {
557651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK: fcvtxn v0.2s, v0.2d
558651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  return vcvtx_f32_f64(v);
559651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}
560