master
1/*===---- arm_fp16.h - ARM FP16 intrinsics ---------------------------------===
2 *
3 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to deal
5 * in the Software without restriction, including without limitation the rights
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 * copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions:
9 *
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 * THE SOFTWARE.
20 *
21 *===-----------------------------------------------------------------------===
22 */
23
24#ifndef __ARM_FP16_H
25#define __ARM_FP16_H
26
27#include <stdint.h>
28
29typedef __fp16 float16_t;
30#define __ai static __inline__ __attribute__((__always_inline__, __nodebug__))
31
32#if defined(__aarch64__) || defined(__arm64ec__)
33#define vabdh_f16(__p0, __p1) __extension__ ({ \
34 float16_t __ret; \
35 float16_t __s0 = __p0; \
36 float16_t __s1 = __p1; \
37 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vabdh_f16(__s0, __s1)); \
38 __ret; \
39})
40#define vabsh_f16(__p0) __extension__ ({ \
41 float16_t __ret; \
42 float16_t __s0 = __p0; \
43 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vabsh_f16(__s0)); \
44 __ret; \
45})
46#define vaddh_f16(__p0, __p1) __extension__ ({ \
47 float16_t __ret; \
48 float16_t __s0 = __p0; \
49 float16_t __s1 = __p1; \
50 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vaddh_f16(__s0, __s1)); \
51 __ret; \
52})
53#define vcageh_f16(__p0, __p1) __extension__ ({ \
54 uint16_t __ret; \
55 float16_t __s0 = __p0; \
56 float16_t __s1 = __p1; \
57 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcageh_f16(__s0, __s1)); \
58 __ret; \
59})
60#define vcagth_f16(__p0, __p1) __extension__ ({ \
61 uint16_t __ret; \
62 float16_t __s0 = __p0; \
63 float16_t __s1 = __p1; \
64 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcagth_f16(__s0, __s1)); \
65 __ret; \
66})
67#define vcaleh_f16(__p0, __p1) __extension__ ({ \
68 uint16_t __ret; \
69 float16_t __s0 = __p0; \
70 float16_t __s1 = __p1; \
71 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcaleh_f16(__s0, __s1)); \
72 __ret; \
73})
74#define vcalth_f16(__p0, __p1) __extension__ ({ \
75 uint16_t __ret; \
76 float16_t __s0 = __p0; \
77 float16_t __s1 = __p1; \
78 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcalth_f16(__s0, __s1)); \
79 __ret; \
80})
81#define vceqh_f16(__p0, __p1) __extension__ ({ \
82 uint16_t __ret; \
83 float16_t __s0 = __p0; \
84 float16_t __s1 = __p1; \
85 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vceqh_f16(__s0, __s1)); \
86 __ret; \
87})
88#define vceqzh_f16(__p0) __extension__ ({ \
89 uint16_t __ret; \
90 float16_t __s0 = __p0; \
91 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vceqzh_f16(__s0)); \
92 __ret; \
93})
94#define vcgeh_f16(__p0, __p1) __extension__ ({ \
95 uint16_t __ret; \
96 float16_t __s0 = __p0; \
97 float16_t __s1 = __p1; \
98 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcgeh_f16(__s0, __s1)); \
99 __ret; \
100})
101#define vcgezh_f16(__p0) __extension__ ({ \
102 uint16_t __ret; \
103 float16_t __s0 = __p0; \
104 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcgezh_f16(__s0)); \
105 __ret; \
106})
107#define vcgth_f16(__p0, __p1) __extension__ ({ \
108 uint16_t __ret; \
109 float16_t __s0 = __p0; \
110 float16_t __s1 = __p1; \
111 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcgth_f16(__s0, __s1)); \
112 __ret; \
113})
114#define vcgtzh_f16(__p0) __extension__ ({ \
115 uint16_t __ret; \
116 float16_t __s0 = __p0; \
117 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcgtzh_f16(__s0)); \
118 __ret; \
119})
120#define vcleh_f16(__p0, __p1) __extension__ ({ \
121 uint16_t __ret; \
122 float16_t __s0 = __p0; \
123 float16_t __s1 = __p1; \
124 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcleh_f16(__s0, __s1)); \
125 __ret; \
126})
127#define vclezh_f16(__p0) __extension__ ({ \
128 uint16_t __ret; \
129 float16_t __s0 = __p0; \
130 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vclezh_f16(__s0)); \
131 __ret; \
132})
133#define vclth_f16(__p0, __p1) __extension__ ({ \
134 uint16_t __ret; \
135 float16_t __s0 = __p0; \
136 float16_t __s1 = __p1; \
137 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vclth_f16(__s0, __s1)); \
138 __ret; \
139})
140#define vcltzh_f16(__p0) __extension__ ({ \
141 uint16_t __ret; \
142 float16_t __s0 = __p0; \
143 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcltzh_f16(__s0)); \
144 __ret; \
145})
146#define vcvth_n_s16_f16(__p0, __p1) __extension__ ({ \
147 int16_t __ret; \
148 float16_t __s0 = __p0; \
149 __ret = __builtin_bit_cast(int16_t, __builtin_neon_vcvth_n_s16_f16(__s0, __p1)); \
150 __ret; \
151})
152#define vcvth_n_s32_f16(__p0, __p1) __extension__ ({ \
153 int32_t __ret; \
154 float16_t __s0 = __p0; \
155 __ret = __builtin_bit_cast(int32_t, __builtin_neon_vcvth_n_s32_f16(__s0, __p1)); \
156 __ret; \
157})
158#define vcvth_n_s64_f16(__p0, __p1) __extension__ ({ \
159 int64_t __ret; \
160 float16_t __s0 = __p0; \
161 __ret = __builtin_bit_cast(int64_t, __builtin_neon_vcvth_n_s64_f16(__s0, __p1)); \
162 __ret; \
163})
164#define vcvth_n_u16_f16(__p0, __p1) __extension__ ({ \
165 uint16_t __ret; \
166 float16_t __s0 = __p0; \
167 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcvth_n_u16_f16(__s0, __p1)); \
168 __ret; \
169})
170#define vcvth_n_u32_f16(__p0, __p1) __extension__ ({ \
171 uint32_t __ret; \
172 float16_t __s0 = __p0; \
173 __ret = __builtin_bit_cast(uint32_t, __builtin_neon_vcvth_n_u32_f16(__s0, __p1)); \
174 __ret; \
175})
176#define vcvth_n_u64_f16(__p0, __p1) __extension__ ({ \
177 uint64_t __ret; \
178 float16_t __s0 = __p0; \
179 __ret = __builtin_bit_cast(uint64_t, __builtin_neon_vcvth_n_u64_f16(__s0, __p1)); \
180 __ret; \
181})
182#define vcvth_s16_f16(__p0) __extension__ ({ \
183 int16_t __ret; \
184 float16_t __s0 = __p0; \
185 __ret = __builtin_bit_cast(int16_t, __builtin_neon_vcvth_s16_f16(__s0)); \
186 __ret; \
187})
188#define vcvth_s32_f16(__p0) __extension__ ({ \
189 int32_t __ret; \
190 float16_t __s0 = __p0; \
191 __ret = __builtin_bit_cast(int32_t, __builtin_neon_vcvth_s32_f16(__s0)); \
192 __ret; \
193})
194#define vcvth_s64_f16(__p0) __extension__ ({ \
195 int64_t __ret; \
196 float16_t __s0 = __p0; \
197 __ret = __builtin_bit_cast(int64_t, __builtin_neon_vcvth_s64_f16(__s0)); \
198 __ret; \
199})
200#define vcvth_u16_f16(__p0) __extension__ ({ \
201 uint16_t __ret; \
202 float16_t __s0 = __p0; \
203 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcvth_u16_f16(__s0)); \
204 __ret; \
205})
206#define vcvth_u32_f16(__p0) __extension__ ({ \
207 uint32_t __ret; \
208 float16_t __s0 = __p0; \
209 __ret = __builtin_bit_cast(uint32_t, __builtin_neon_vcvth_u32_f16(__s0)); \
210 __ret; \
211})
212#define vcvth_u64_f16(__p0) __extension__ ({ \
213 uint64_t __ret; \
214 float16_t __s0 = __p0; \
215 __ret = __builtin_bit_cast(uint64_t, __builtin_neon_vcvth_u64_f16(__s0)); \
216 __ret; \
217})
218#define vcvtah_s16_f16(__p0) __extension__ ({ \
219 int16_t __ret; \
220 float16_t __s0 = __p0; \
221 __ret = __builtin_bit_cast(int16_t, __builtin_neon_vcvtah_s16_f16(__s0)); \
222 __ret; \
223})
224#define vcvtah_s32_f16(__p0) __extension__ ({ \
225 int32_t __ret; \
226 float16_t __s0 = __p0; \
227 __ret = __builtin_bit_cast(int32_t, __builtin_neon_vcvtah_s32_f16(__s0)); \
228 __ret; \
229})
230#define vcvtah_s64_f16(__p0) __extension__ ({ \
231 int64_t __ret; \
232 float16_t __s0 = __p0; \
233 __ret = __builtin_bit_cast(int64_t, __builtin_neon_vcvtah_s64_f16(__s0)); \
234 __ret; \
235})
236#define vcvtah_u16_f16(__p0) __extension__ ({ \
237 uint16_t __ret; \
238 float16_t __s0 = __p0; \
239 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcvtah_u16_f16(__s0)); \
240 __ret; \
241})
242#define vcvtah_u32_f16(__p0) __extension__ ({ \
243 uint32_t __ret; \
244 float16_t __s0 = __p0; \
245 __ret = __builtin_bit_cast(uint32_t, __builtin_neon_vcvtah_u32_f16(__s0)); \
246 __ret; \
247})
248#define vcvtah_u64_f16(__p0) __extension__ ({ \
249 uint64_t __ret; \
250 float16_t __s0 = __p0; \
251 __ret = __builtin_bit_cast(uint64_t, __builtin_neon_vcvtah_u64_f16(__s0)); \
252 __ret; \
253})
254#define vcvth_f16_u16(__p0) __extension__ ({ \
255 float16_t __ret; \
256 uint16_t __s0 = __p0; \
257 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_f16_u16(__s0)); \
258 __ret; \
259})
260#define vcvth_f16_s16(__p0) __extension__ ({ \
261 float16_t __ret; \
262 int16_t __s0 = __p0; \
263 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_f16_s16(__s0)); \
264 __ret; \
265})
266#define vcvth_f16_u32(__p0) __extension__ ({ \
267 float16_t __ret; \
268 uint32_t __s0 = __p0; \
269 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_f16_u32(__s0)); \
270 __ret; \
271})
272#define vcvth_f16_s32(__p0) __extension__ ({ \
273 float16_t __ret; \
274 int32_t __s0 = __p0; \
275 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_f16_s32(__s0)); \
276 __ret; \
277})
278#define vcvth_f16_u64(__p0) __extension__ ({ \
279 float16_t __ret; \
280 uint64_t __s0 = __p0; \
281 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_f16_u64(__s0)); \
282 __ret; \
283})
284#define vcvth_f16_s64(__p0) __extension__ ({ \
285 float16_t __ret; \
286 int64_t __s0 = __p0; \
287 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_f16_s64(__s0)); \
288 __ret; \
289})
290#define vcvth_n_f16_u32(__p0, __p1) __extension__ ({ \
291 float16_t __ret; \
292 uint32_t __s0 = __p0; \
293 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_n_f16_u32(__s0, __p1)); \
294 __ret; \
295})
296#define vcvth_n_f16_s32(__p0, __p1) __extension__ ({ \
297 float16_t __ret; \
298 int32_t __s0 = __p0; \
299 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_n_f16_s32(__s0, __p1)); \
300 __ret; \
301})
302#define vcvth_n_f16_u64(__p0, __p1) __extension__ ({ \
303 float16_t __ret; \
304 uint64_t __s0 = __p0; \
305 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_n_f16_u64(__s0, __p1)); \
306 __ret; \
307})
308#define vcvth_n_f16_s64(__p0, __p1) __extension__ ({ \
309 float16_t __ret; \
310 int64_t __s0 = __p0; \
311 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_n_f16_s64(__s0, __p1)); \
312 __ret; \
313})
314#define vcvth_n_f16_u16(__p0, __p1) __extension__ ({ \
315 float16_t __ret; \
316 uint16_t __s0 = __p0; \
317 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_n_f16_u16(__s0, __p1)); \
318 __ret; \
319})
320#define vcvth_n_f16_s16(__p0, __p1) __extension__ ({ \
321 float16_t __ret; \
322 int16_t __s0 = __p0; \
323 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vcvth_n_f16_s16(__s0, __p1)); \
324 __ret; \
325})
326#define vcvtmh_s16_f16(__p0) __extension__ ({ \
327 int16_t __ret; \
328 float16_t __s0 = __p0; \
329 __ret = __builtin_bit_cast(int16_t, __builtin_neon_vcvtmh_s16_f16(__s0)); \
330 __ret; \
331})
332#define vcvtmh_s32_f16(__p0) __extension__ ({ \
333 int32_t __ret; \
334 float16_t __s0 = __p0; \
335 __ret = __builtin_bit_cast(int32_t, __builtin_neon_vcvtmh_s32_f16(__s0)); \
336 __ret; \
337})
338#define vcvtmh_s64_f16(__p0) __extension__ ({ \
339 int64_t __ret; \
340 float16_t __s0 = __p0; \
341 __ret = __builtin_bit_cast(int64_t, __builtin_neon_vcvtmh_s64_f16(__s0)); \
342 __ret; \
343})
344#define vcvtmh_u16_f16(__p0) __extension__ ({ \
345 uint16_t __ret; \
346 float16_t __s0 = __p0; \
347 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcvtmh_u16_f16(__s0)); \
348 __ret; \
349})
350#define vcvtmh_u32_f16(__p0) __extension__ ({ \
351 uint32_t __ret; \
352 float16_t __s0 = __p0; \
353 __ret = __builtin_bit_cast(uint32_t, __builtin_neon_vcvtmh_u32_f16(__s0)); \
354 __ret; \
355})
356#define vcvtmh_u64_f16(__p0) __extension__ ({ \
357 uint64_t __ret; \
358 float16_t __s0 = __p0; \
359 __ret = __builtin_bit_cast(uint64_t, __builtin_neon_vcvtmh_u64_f16(__s0)); \
360 __ret; \
361})
362#define vcvtnh_s16_f16(__p0) __extension__ ({ \
363 int16_t __ret; \
364 float16_t __s0 = __p0; \
365 __ret = __builtin_bit_cast(int16_t, __builtin_neon_vcvtnh_s16_f16(__s0)); \
366 __ret; \
367})
368#define vcvtnh_s32_f16(__p0) __extension__ ({ \
369 int32_t __ret; \
370 float16_t __s0 = __p0; \
371 __ret = __builtin_bit_cast(int32_t, __builtin_neon_vcvtnh_s32_f16(__s0)); \
372 __ret; \
373})
374#define vcvtnh_s64_f16(__p0) __extension__ ({ \
375 int64_t __ret; \
376 float16_t __s0 = __p0; \
377 __ret = __builtin_bit_cast(int64_t, __builtin_neon_vcvtnh_s64_f16(__s0)); \
378 __ret; \
379})
380#define vcvtnh_u16_f16(__p0) __extension__ ({ \
381 uint16_t __ret; \
382 float16_t __s0 = __p0; \
383 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcvtnh_u16_f16(__s0)); \
384 __ret; \
385})
386#define vcvtnh_u32_f16(__p0) __extension__ ({ \
387 uint32_t __ret; \
388 float16_t __s0 = __p0; \
389 __ret = __builtin_bit_cast(uint32_t, __builtin_neon_vcvtnh_u32_f16(__s0)); \
390 __ret; \
391})
392#define vcvtnh_u64_f16(__p0) __extension__ ({ \
393 uint64_t __ret; \
394 float16_t __s0 = __p0; \
395 __ret = __builtin_bit_cast(uint64_t, __builtin_neon_vcvtnh_u64_f16(__s0)); \
396 __ret; \
397})
398#define vcvtph_s16_f16(__p0) __extension__ ({ \
399 int16_t __ret; \
400 float16_t __s0 = __p0; \
401 __ret = __builtin_bit_cast(int16_t, __builtin_neon_vcvtph_s16_f16(__s0)); \
402 __ret; \
403})
404#define vcvtph_s32_f16(__p0) __extension__ ({ \
405 int32_t __ret; \
406 float16_t __s0 = __p0; \
407 __ret = __builtin_bit_cast(int32_t, __builtin_neon_vcvtph_s32_f16(__s0)); \
408 __ret; \
409})
410#define vcvtph_s64_f16(__p0) __extension__ ({ \
411 int64_t __ret; \
412 float16_t __s0 = __p0; \
413 __ret = __builtin_bit_cast(int64_t, __builtin_neon_vcvtph_s64_f16(__s0)); \
414 __ret; \
415})
416#define vcvtph_u16_f16(__p0) __extension__ ({ \
417 uint16_t __ret; \
418 float16_t __s0 = __p0; \
419 __ret = __builtin_bit_cast(uint16_t, __builtin_neon_vcvtph_u16_f16(__s0)); \
420 __ret; \
421})
422#define vcvtph_u32_f16(__p0) __extension__ ({ \
423 uint32_t __ret; \
424 float16_t __s0 = __p0; \
425 __ret = __builtin_bit_cast(uint32_t, __builtin_neon_vcvtph_u32_f16(__s0)); \
426 __ret; \
427})
428#define vcvtph_u64_f16(__p0) __extension__ ({ \
429 uint64_t __ret; \
430 float16_t __s0 = __p0; \
431 __ret = __builtin_bit_cast(uint64_t, __builtin_neon_vcvtph_u64_f16(__s0)); \
432 __ret; \
433})
434#define vdivh_f16(__p0, __p1) __extension__ ({ \
435 float16_t __ret; \
436 float16_t __s0 = __p0; \
437 float16_t __s1 = __p1; \
438 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vdivh_f16(__s0, __s1)); \
439 __ret; \
440})
441#define vfmah_f16(__p0, __p1, __p2) __extension__ ({ \
442 float16_t __ret; \
443 float16_t __s0 = __p0; \
444 float16_t __s1 = __p1; \
445 float16_t __s2 = __p2; \
446 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vfmah_f16(__s0, __s1, __s2)); \
447 __ret; \
448})
449#define vfmsh_f16(__p0, __p1, __p2) __extension__ ({ \
450 float16_t __ret; \
451 float16_t __s0 = __p0; \
452 float16_t __s1 = __p1; \
453 float16_t __s2 = __p2; \
454 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vfmsh_f16(__s0, __s1, __s2)); \
455 __ret; \
456})
457#define vmaxh_f16(__p0, __p1) __extension__ ({ \
458 float16_t __ret; \
459 float16_t __s0 = __p0; \
460 float16_t __s1 = __p1; \
461 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vmaxh_f16(__s0, __s1)); \
462 __ret; \
463})
464#define vmaxnmh_f16(__p0, __p1) __extension__ ({ \
465 float16_t __ret; \
466 float16_t __s0 = __p0; \
467 float16_t __s1 = __p1; \
468 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vmaxnmh_f16(__s0, __s1)); \
469 __ret; \
470})
471#define vminh_f16(__p0, __p1) __extension__ ({ \
472 float16_t __ret; \
473 float16_t __s0 = __p0; \
474 float16_t __s1 = __p1; \
475 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vminh_f16(__s0, __s1)); \
476 __ret; \
477})
478#define vminnmh_f16(__p0, __p1) __extension__ ({ \
479 float16_t __ret; \
480 float16_t __s0 = __p0; \
481 float16_t __s1 = __p1; \
482 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vminnmh_f16(__s0, __s1)); \
483 __ret; \
484})
485#define vmulh_f16(__p0, __p1) __extension__ ({ \
486 float16_t __ret; \
487 float16_t __s0 = __p0; \
488 float16_t __s1 = __p1; \
489 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vmulh_f16(__s0, __s1)); \
490 __ret; \
491})
492#define vmulxh_f16(__p0, __p1) __extension__ ({ \
493 float16_t __ret; \
494 float16_t __s0 = __p0; \
495 float16_t __s1 = __p1; \
496 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vmulxh_f16(__s0, __s1)); \
497 __ret; \
498})
499#define vnegh_f16(__p0) __extension__ ({ \
500 float16_t __ret; \
501 float16_t __s0 = __p0; \
502 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vnegh_f16(__s0)); \
503 __ret; \
504})
505#define vrecpeh_f16(__p0) __extension__ ({ \
506 float16_t __ret; \
507 float16_t __s0 = __p0; \
508 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrecpeh_f16(__s0)); \
509 __ret; \
510})
511#define vrecpsh_f16(__p0, __p1) __extension__ ({ \
512 float16_t __ret; \
513 float16_t __s0 = __p0; \
514 float16_t __s1 = __p1; \
515 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrecpsh_f16(__s0, __s1)); \
516 __ret; \
517})
518#define vrecpxh_f16(__p0) __extension__ ({ \
519 float16_t __ret; \
520 float16_t __s0 = __p0; \
521 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrecpxh_f16(__s0)); \
522 __ret; \
523})
524#define vrndh_f16(__p0) __extension__ ({ \
525 float16_t __ret; \
526 float16_t __s0 = __p0; \
527 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrndh_f16(__s0)); \
528 __ret; \
529})
530#define vrndah_f16(__p0) __extension__ ({ \
531 float16_t __ret; \
532 float16_t __s0 = __p0; \
533 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrndah_f16(__s0)); \
534 __ret; \
535})
536#define vrndih_f16(__p0) __extension__ ({ \
537 float16_t __ret; \
538 float16_t __s0 = __p0; \
539 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrndih_f16(__s0)); \
540 __ret; \
541})
542#define vrndmh_f16(__p0) __extension__ ({ \
543 float16_t __ret; \
544 float16_t __s0 = __p0; \
545 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrndmh_f16(__s0)); \
546 __ret; \
547})
548#define vrndnh_f16(__p0) __extension__ ({ \
549 float16_t __ret; \
550 float16_t __s0 = __p0; \
551 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrndnh_f16(__s0)); \
552 __ret; \
553})
554#define vrndph_f16(__p0) __extension__ ({ \
555 float16_t __ret; \
556 float16_t __s0 = __p0; \
557 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrndph_f16(__s0)); \
558 __ret; \
559})
560#define vrndxh_f16(__p0) __extension__ ({ \
561 float16_t __ret; \
562 float16_t __s0 = __p0; \
563 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrndxh_f16(__s0)); \
564 __ret; \
565})
566#define vrsqrteh_f16(__p0) __extension__ ({ \
567 float16_t __ret; \
568 float16_t __s0 = __p0; \
569 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrsqrteh_f16(__s0)); \
570 __ret; \
571})
572#define vrsqrtsh_f16(__p0, __p1) __extension__ ({ \
573 float16_t __ret; \
574 float16_t __s0 = __p0; \
575 float16_t __s1 = __p1; \
576 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vrsqrtsh_f16(__s0, __s1)); \
577 __ret; \
578})
579#define vsqrth_f16(__p0) __extension__ ({ \
580 float16_t __ret; \
581 float16_t __s0 = __p0; \
582 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vsqrth_f16(__s0)); \
583 __ret; \
584})
585#define vsubh_f16(__p0, __p1) __extension__ ({ \
586 float16_t __ret; \
587 float16_t __s0 = __p0; \
588 float16_t __s1 = __p1; \
589 __ret = __builtin_bit_cast(float16_t, __builtin_neon_vsubh_f16(__s0, __s1)); \
590 __ret; \
591})
592#endif
593
594#undef __ai
595
596#endif /* __ARM_FP16_H */