annotate gcc/config/arm/arm_fp16.h @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* ARM FP16 intrinsics include file.
kono
parents:
diff changeset
2
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
3 Copyright (C) 2016-2018 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
4 Contributed by ARM Ltd.
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 This file is part of GCC.
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 GCC is free software; you can redistribute it and/or modify it
kono
parents:
diff changeset
9 under the terms of the GNU General Public License as published
kono
parents:
diff changeset
10 by the Free Software Foundation; either version 3, or (at your
kono
parents:
diff changeset
11 option) any later version.
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 GCC is distributed in the hope that it will be useful, but WITHOUT
kono
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
kono
parents:
diff changeset
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
kono
parents:
diff changeset
16 License for more details.
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 Under Section 7 of GPL version 3, you are granted additional
kono
parents:
diff changeset
19 permissions described in the GCC Runtime Library Exception, version
kono
parents:
diff changeset
20 3.1, as published by the Free Software Foundation.
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 You should have received a copy of the GNU General Public License and
kono
parents:
diff changeset
23 a copy of the GCC Runtime Library Exception along with this program;
kono
parents:
diff changeset
24 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
kono
parents:
diff changeset
25 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27 #ifndef _GCC_ARM_FP16_H
kono
parents:
diff changeset
28 #define _GCC_ARM_FP16_H 1
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 #ifdef __cplusplus
kono
parents:
diff changeset
31 extern "C" {
kono
parents:
diff changeset
32 #endif
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 #include <stdint.h>
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 /* Intrinsics for FP16 instructions. */
kono
parents:
diff changeset
37 #pragma GCC push_options
kono
parents:
diff changeset
38 #pragma GCC target ("fpu=fp-armv8")
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 #if defined (__ARM_FEATURE_FP16_SCALAR_ARITHMETIC)
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 typedef __fp16 float16_t;
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
45 vabsh_f16 (float16_t __a)
kono
parents:
diff changeset
46 {
kono
parents:
diff changeset
47 return __builtin_neon_vabshf (__a);
kono
parents:
diff changeset
48 }
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
51 vaddh_f16 (float16_t __a, float16_t __b)
kono
parents:
diff changeset
52 {
kono
parents:
diff changeset
53 return __a + __b;
kono
parents:
diff changeset
54 }
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 __extension__ static __inline int32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
57 vcvtah_s32_f16 (float16_t __a)
kono
parents:
diff changeset
58 {
kono
parents:
diff changeset
59 return __builtin_neon_vcvtahssi (__a);
kono
parents:
diff changeset
60 }
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
63 vcvtah_u32_f16 (float16_t __a)
kono
parents:
diff changeset
64 {
kono
parents:
diff changeset
65 return __builtin_neon_vcvtahusi (__a);
kono
parents:
diff changeset
66 }
kono
parents:
diff changeset
67
kono
parents:
diff changeset
68 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
69 vcvth_f16_s32 (int32_t __a)
kono
parents:
diff changeset
70 {
kono
parents:
diff changeset
71 return __builtin_neon_vcvthshf (__a);
kono
parents:
diff changeset
72 }
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
75 vcvth_f16_u32 (uint32_t __a)
kono
parents:
diff changeset
76 {
kono
parents:
diff changeset
77 return __builtin_neon_vcvthuhf (__a);
kono
parents:
diff changeset
78 }
kono
parents:
diff changeset
79
kono
parents:
diff changeset
80 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
81 vcvth_n_f16_s32 (int32_t __a, const int __b)
kono
parents:
diff changeset
82 {
kono
parents:
diff changeset
83 return __builtin_neon_vcvths_nhf (__a, __b);
kono
parents:
diff changeset
84 }
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
87 vcvth_n_f16_u32 (uint32_t __a, const int __b)
kono
parents:
diff changeset
88 {
kono
parents:
diff changeset
89 return __builtin_neon_vcvthu_nhf ((int32_t)__a, __b);
kono
parents:
diff changeset
90 }
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 __extension__ static __inline int32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
93 vcvth_n_s32_f16 (float16_t __a, const int __b)
kono
parents:
diff changeset
94 {
kono
parents:
diff changeset
95 return __builtin_neon_vcvths_nsi (__a, __b);
kono
parents:
diff changeset
96 }
kono
parents:
diff changeset
97
kono
parents:
diff changeset
98 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
99 vcvth_n_u32_f16 (float16_t __a, const int __b)
kono
parents:
diff changeset
100 {
kono
parents:
diff changeset
101 return (uint32_t)__builtin_neon_vcvthu_nsi (__a, __b);
kono
parents:
diff changeset
102 }
kono
parents:
diff changeset
103
kono
parents:
diff changeset
104 __extension__ static __inline int32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
105 vcvth_s32_f16 (float16_t __a)
kono
parents:
diff changeset
106 {
kono
parents:
diff changeset
107 return __builtin_neon_vcvthssi (__a);
kono
parents:
diff changeset
108 }
kono
parents:
diff changeset
109
kono
parents:
diff changeset
110 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
111 vcvth_u32_f16 (float16_t __a)
kono
parents:
diff changeset
112 {
kono
parents:
diff changeset
113 return __builtin_neon_vcvthusi (__a);
kono
parents:
diff changeset
114 }
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116 __extension__ static __inline int32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
117 vcvtmh_s32_f16 (float16_t __a)
kono
parents:
diff changeset
118 {
kono
parents:
diff changeset
119 return __builtin_neon_vcvtmhssi (__a);
kono
parents:
diff changeset
120 }
kono
parents:
diff changeset
121
kono
parents:
diff changeset
122 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
123 vcvtmh_u32_f16 (float16_t __a)
kono
parents:
diff changeset
124 {
kono
parents:
diff changeset
125 return __builtin_neon_vcvtmhusi (__a);
kono
parents:
diff changeset
126 }
kono
parents:
diff changeset
127
kono
parents:
diff changeset
128 __extension__ static __inline int32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
129 vcvtnh_s32_f16 (float16_t __a)
kono
parents:
diff changeset
130 {
kono
parents:
diff changeset
131 return __builtin_neon_vcvtnhssi (__a);
kono
parents:
diff changeset
132 }
kono
parents:
diff changeset
133
kono
parents:
diff changeset
134 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
135 vcvtnh_u32_f16 (float16_t __a)
kono
parents:
diff changeset
136 {
kono
parents:
diff changeset
137 return __builtin_neon_vcvtnhusi (__a);
kono
parents:
diff changeset
138 }
kono
parents:
diff changeset
139
kono
parents:
diff changeset
140 __extension__ static __inline int32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
141 vcvtph_s32_f16 (float16_t __a)
kono
parents:
diff changeset
142 {
kono
parents:
diff changeset
143 return __builtin_neon_vcvtphssi (__a);
kono
parents:
diff changeset
144 }
kono
parents:
diff changeset
145
kono
parents:
diff changeset
146 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
147 vcvtph_u32_f16 (float16_t __a)
kono
parents:
diff changeset
148 {
kono
parents:
diff changeset
149 return __builtin_neon_vcvtphusi (__a);
kono
parents:
diff changeset
150 }
kono
parents:
diff changeset
151
kono
parents:
diff changeset
152 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
153 vdivh_f16 (float16_t __a, float16_t __b)
kono
parents:
diff changeset
154 {
kono
parents:
diff changeset
155 return __a / __b;
kono
parents:
diff changeset
156 }
kono
parents:
diff changeset
157
kono
parents:
diff changeset
158 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
159 vfmah_f16 (float16_t __a, float16_t __b, float16_t __c)
kono
parents:
diff changeset
160 {
kono
parents:
diff changeset
161 return __builtin_neon_vfmahf (__a, __b, __c);
kono
parents:
diff changeset
162 }
kono
parents:
diff changeset
163
kono
parents:
diff changeset
164 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
165 vfmsh_f16 (float16_t __a, float16_t __b, float16_t __c)
kono
parents:
diff changeset
166 {
kono
parents:
diff changeset
167 return __builtin_neon_vfmshf (__a, __b, __c);
kono
parents:
diff changeset
168 }
kono
parents:
diff changeset
169
kono
parents:
diff changeset
170 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
171 vmaxnmh_f16 (float16_t __a, float16_t __b)
kono
parents:
diff changeset
172 {
kono
parents:
diff changeset
173 return __builtin_neon_vmaxnmhf (__a, __b);
kono
parents:
diff changeset
174 }
kono
parents:
diff changeset
175
kono
parents:
diff changeset
176 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
177 vminnmh_f16 (float16_t __a, float16_t __b)
kono
parents:
diff changeset
178 {
kono
parents:
diff changeset
179 return __builtin_neon_vminnmhf (__a, __b);
kono
parents:
diff changeset
180 }
kono
parents:
diff changeset
181
kono
parents:
diff changeset
182 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
183 vmulh_f16 (float16_t __a, float16_t __b)
kono
parents:
diff changeset
184 {
kono
parents:
diff changeset
185 return __a * __b;
kono
parents:
diff changeset
186 }
kono
parents:
diff changeset
187
kono
parents:
diff changeset
188 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
189 vnegh_f16 (float16_t __a)
kono
parents:
diff changeset
190 {
kono
parents:
diff changeset
191 return - __a;
kono
parents:
diff changeset
192 }
kono
parents:
diff changeset
193
kono
parents:
diff changeset
194 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
195 vrndah_f16 (float16_t __a)
kono
parents:
diff changeset
196 {
kono
parents:
diff changeset
197 return __builtin_neon_vrndahf (__a);
kono
parents:
diff changeset
198 }
kono
parents:
diff changeset
199
kono
parents:
diff changeset
200 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
201 vrndh_f16 (float16_t __a)
kono
parents:
diff changeset
202 {
kono
parents:
diff changeset
203 return __builtin_neon_vrndhf (__a);
kono
parents:
diff changeset
204 }
kono
parents:
diff changeset
205
kono
parents:
diff changeset
206 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
207 vrndih_f16 (float16_t __a)
kono
parents:
diff changeset
208 {
kono
parents:
diff changeset
209 return __builtin_neon_vrndihf (__a);
kono
parents:
diff changeset
210 }
kono
parents:
diff changeset
211
kono
parents:
diff changeset
212 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
213 vrndmh_f16 (float16_t __a)
kono
parents:
diff changeset
214 {
kono
parents:
diff changeset
215 return __builtin_neon_vrndmhf (__a);
kono
parents:
diff changeset
216 }
kono
parents:
diff changeset
217
kono
parents:
diff changeset
218 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
219 vrndnh_f16 (float16_t __a)
kono
parents:
diff changeset
220 {
kono
parents:
diff changeset
221 return __builtin_neon_vrndnhf (__a);
kono
parents:
diff changeset
222 }
kono
parents:
diff changeset
223
kono
parents:
diff changeset
224 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
225 vrndph_f16 (float16_t __a)
kono
parents:
diff changeset
226 {
kono
parents:
diff changeset
227 return __builtin_neon_vrndphf (__a);
kono
parents:
diff changeset
228 }
kono
parents:
diff changeset
229
kono
parents:
diff changeset
230 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
231 vrndxh_f16 (float16_t __a)
kono
parents:
diff changeset
232 {
kono
parents:
diff changeset
233 return __builtin_neon_vrndxhf (__a);
kono
parents:
diff changeset
234 }
kono
parents:
diff changeset
235
kono
parents:
diff changeset
236 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
237 vsqrth_f16 (float16_t __a)
kono
parents:
diff changeset
238 {
kono
parents:
diff changeset
239 return __builtin_neon_vsqrthf (__a);
kono
parents:
diff changeset
240 }
kono
parents:
diff changeset
241
kono
parents:
diff changeset
242 __extension__ static __inline float16_t __attribute__ ((__always_inline__))
kono
parents:
diff changeset
243 vsubh_f16 (float16_t __a, float16_t __b)
kono
parents:
diff changeset
244 {
kono
parents:
diff changeset
245 return __a - __b;
kono
parents:
diff changeset
246 }
kono
parents:
diff changeset
247
kono
parents:
diff changeset
248 #endif /* __ARM_FEATURE_FP16_SCALAR_ARITHMETIC */
kono
parents:
diff changeset
249 #pragma GCC pop_options
kono
parents:
diff changeset
250
kono
parents:
diff changeset
251 #ifdef __cplusplus
kono
parents:
diff changeset
252 }
kono
parents:
diff changeset
253 #endif
kono
parents:
diff changeset
254
kono
parents:
diff changeset
255 #endif