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 --check-prefix CHECK-COMMON --check-prefix CHECK-ARM64
4
5 // Test new aarch64 intrinsics and types
6
7 #include <arm_neon.h>
8
test_vget_high_s8(int8x16_t a)9 int8x8_t test_vget_high_s8(int8x16_t a) {
10 // CHECK-COMMON-LABEL: test_vget_high_s8:
11 return vget_high_s8(a);
12 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
13 }
14
test_vget_high_s16(int16x8_t a)15 int16x4_t test_vget_high_s16(int16x8_t a) {
16 // CHECK-COMMON-LABEL: test_vget_high_s16:
17 return vget_high_s16(a);
18 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
19 }
20
test_vget_high_s32(int32x4_t a)21 int32x2_t test_vget_high_s32(int32x4_t a) {
22 // CHECK-COMMON-LABEL: test_vget_high_s32:
23 return vget_high_s32(a);
24 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
25 }
26
test_vget_high_s64(int64x2_t a)27 int64x1_t test_vget_high_s64(int64x2_t a) {
28 // CHECK-COMMON-LABEL: test_vget_high_s64:
29 return vget_high_s64(a);
30 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
31 }
32
test_vget_high_u8(uint8x16_t a)33 uint8x8_t test_vget_high_u8(uint8x16_t a) {
34 // CHECK-COMMON-LABEL: test_vget_high_u8:
35 return vget_high_u8(a);
36 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
37 }
38
test_vget_high_u16(uint16x8_t a)39 uint16x4_t test_vget_high_u16(uint16x8_t a) {
40 // CHECK-COMMON-LABEL: test_vget_high_u16:
41 return vget_high_u16(a);
42 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
43 }
44
test_vget_high_u32(uint32x4_t a)45 uint32x2_t test_vget_high_u32(uint32x4_t a) {
46 // CHECK-COMMON-LABEL: test_vget_high_u32:
47 return vget_high_u32(a);
48 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
49 }
50
test_vget_high_u64(uint64x2_t a)51 uint64x1_t test_vget_high_u64(uint64x2_t a) {
52 // CHECK-COMMON-LABEL: test_vget_high_u64:
53 return vget_high_u64(a);
54 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
55 }
56
test_vget_high_p64(poly64x2_t a)57 poly64x1_t test_vget_high_p64(poly64x2_t a) {
58 // CHECK-COMMON-LABEL: test_vget_high_p64:
59 return vget_high_p64(a);
60 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
61 }
62
test_vget_high_f16(float16x8_t a)63 float16x4_t test_vget_high_f16(float16x8_t a) {
64 // CHECK-COMMON-LABEL: test_vget_high_f16:
65 return vget_high_f16(a);
66 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
67 }
68
test_vget_high_f32(float32x4_t a)69 float32x2_t test_vget_high_f32(float32x4_t a) {
70 // CHECK-COMMON-LABEL: test_vget_high_f32:
71 return vget_high_f32(a);
72 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
73 }
74
test_vget_high_p8(poly8x16_t a)75 poly8x8_t test_vget_high_p8(poly8x16_t a) {
76 // CHECK-COMMON-LABEL: test_vget_high_p8:
77 return vget_high_p8(a);
78 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
79 }
80
test_vget_high_p16(poly16x8_t a)81 poly16x4_t test_vget_high_p16(poly16x8_t a) {
82 // CHECK-COMMON-LABEL: test_vget_high_p16
83 return vget_high_p16(a);
84 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
85 }
86
test_vget_high_f64(float64x2_t a)87 float64x1_t test_vget_high_f64(float64x2_t a) {
88 // CHECK-COMMON-LABEL: test_vget_high_f64
89 return vget_high_f64(a);
90 // CHECK-ARM64: ext v0.16b, v0.16b, v0.16b, #8
91 }
92
test_vget_low_s8(int8x16_t a)93 int8x8_t test_vget_low_s8(int8x16_t a) {
94 // CHECK-COMMON-LABEL: test_vget_low_s8:
95 return vget_low_s8(a);
96 // CHECK-COMMON-NEXT: ret
97 }
98
test_vget_low_s16(int16x8_t a)99 int16x4_t test_vget_low_s16(int16x8_t a) {
100 // CHECK-COMMON-LABEL: test_vget_low_s16:
101 return vget_low_s16(a);
102 // CHECK-COMMON-NEXT: ret
103 }
104
test_vget_low_s32(int32x4_t a)105 int32x2_t test_vget_low_s32(int32x4_t a) {
106 // CHECK-COMMON-LABEL: test_vget_low_s32:
107 return vget_low_s32(a);
108 // CHECK-COMMON-NEXT: ret
109 }
110
test_vget_low_s64(int64x2_t a)111 int64x1_t test_vget_low_s64(int64x2_t a) {
112 // CHECK-COMMON-LABEL: test_vget_low_s64:
113 return vget_low_s64(a);
114 // CHECK-COMMON-NEXT: ret
115 }
116
test_vget_low_u8(uint8x16_t a)117 uint8x8_t test_vget_low_u8(uint8x16_t a) {
118 // CHECK-COMMON-LABEL: test_vget_low_u8:
119 return vget_low_u8(a);
120 // CHECK-COMMON-NEXT: ret
121 }
122
test_vget_low_u16(uint16x8_t a)123 uint16x4_t test_vget_low_u16(uint16x8_t a) {
124 // CHECK-COMMON-LABEL: test_vget_low_u16:
125 return vget_low_u16(a);
126 // CHECK-COMMON-NEXT: ret
127 }
128
test_vget_low_u32(uint32x4_t a)129 uint32x2_t test_vget_low_u32(uint32x4_t a) {
130 // CHECK-COMMON-LABEL: test_vget_low_u32:
131 return vget_low_u32(a);
132 // CHECK-COMMON-NEXT: ret
133 }
134
test_vget_low_u64(uint64x2_t a)135 uint64x1_t test_vget_low_u64(uint64x2_t a) {
136 // CHECK-COMMON-LABEL: test_vget_low_u64:
137 return vget_low_u64(a);
138 // CHECK-COMMON-NEXT: ret
139 }
140
test_vget_low_p64(poly64x2_t a)141 poly64x1_t test_vget_low_p64(poly64x2_t a) {
142 // CHECK-COMMON-LABEL: test_vget_low_p64:
143 return vget_low_p64(a);
144 // CHECK-COMMON-NEXT: ret
145 }
146
test_vget_low_f16(float16x8_t a)147 float16x4_t test_vget_low_f16(float16x8_t a) {
148 // CHECK-COMMON-LABEL: test_vget_low_f16:
149 return vget_low_f16(a);
150 // CHECK-COMMON-NEXT: ret
151 }
152
test_vget_low_f32(float32x4_t a)153 float32x2_t test_vget_low_f32(float32x4_t a) {
154 // CHECK-COMMON-LABEL: test_vget_low_f32:
155 return vget_low_f32(a);
156 // CHECK-COMMON-NEXT: ret
157 }
158
test_vget_low_p8(poly8x16_t a)159 poly8x8_t test_vget_low_p8(poly8x16_t a) {
160 // CHECK-COMMON-LABEL: test_vget_low_p8:
161 return vget_low_p8(a);
162 // CHECK-COMMON-NEXT: ret
163 }
164
test_vget_low_p16(poly16x8_t a)165 poly16x4_t test_vget_low_p16(poly16x8_t a) {
166 // CHECK-COMMON-LABEL: test_vget_low_p16:
167 return vget_low_p16(a);
168 // CHECK-COMMON-NEXT: ret
169 }
170
test_vget_low_f64(float64x2_t a)171 float64x1_t test_vget_low_f64(float64x2_t a) {
172 // CHECK-COMMON-LABEL: test_vget_low_f64:
173 return vget_low_f64(a);
174 // CHECK-COMMON-NEXT: ret
175 }
176
177