1 // -*- C++ -*-
2 
3 #pragma once
4 
5 
6 #ifdef   __cplusplus
7 extern "C"
8 {
9 #endif
10 
11 /* Compiler specific diagnostic adjustment */
12 #if   defined ( __CC_ARM )
13 
14 #elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 )
15 
16 #elif defined ( __APPLE_CC__ )
17   #pragma GCC diagnostic ignored "-Wold-style-cast"
18 
19 #elif defined ( __GNUC__ )
20   #pragma GCC diagnostic push
21   #pragma GCC diagnostic ignored "-Wsign-conversion"
22   #pragma GCC diagnostic ignored "-Wconversion"
23   #pragma GCC diagnostic ignored "-Wunused-parameter"
24   #define GCC_COMPILER
25 
26 #elif defined ( __ICCARM__ )
27 
28 #elif defined ( __TI_ARM__ )
29 
30 #elif defined ( __CSMC__ )
31 
32 #elif defined ( __TASKING__ )
33 
34 #elif defined ( _MSC_VER )
35 
36 #else
37   #error Unknown compiler
38 #endif
39 
40 
41 /* Included for instrinsics definitions */
42 #if defined (_MSC_VER )
43 #include <stdint.h>
44 #define __STATIC_FORCEINLINE static __forceinline
45 #define __STATIC_INLINE static __inline
46 #define __ALIGNED(x) __declspec(align(x))
47 #define __WEAK
48 #elif defined ( __APPLE_CC__ )
49 #include <stdint.h>
50 #define  __ALIGNED(x) __attribute__((aligned(x)))
51 #define __STATIC_FORCEINLINE static inline __attribute__((always_inline))
52 #define __STATIC_INLINE static inline
53 #define __WEAK
54 #elif defined (__GNUC_PYTHON__)
55 #include <stdint.h>
56 #define  __ALIGNED(x) __attribute__((aligned(x)))
57 #define __STATIC_FORCEINLINE static inline __attribute__((always_inline))
58 #define __STATIC_INLINE static inline
59 #define __WEAK
60 #else
61 #include "cmsis_compiler.h"
62 #endif
63 
64 
65 
66 #include <string.h>
67 #include <math.h>
68 #include <float.h>
69 #include <limits.h>
70 
71 /* evaluate ARM DSP feature */
72 #if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1))
73   #define ARM_MATH_DSP                   1
74 #endif
75 
76 #if defined(ARM_MATH_NEON)
77   #if defined(_MSC_VER) && defined(_M_ARM64EC)
78     #include <arm64_neon.h>
79   #else
80     #include <arm_neon.h>
81   #endif
82   #if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) && __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
83     #if !defined(ARM_MATH_NEON_FLOAT16)
84       #define ARM_MATH_NEON_FLOAT16
85     #endif
86   #endif
87 #endif
88 
89 #if !defined(ARM_MATH_AUTOVECTORIZE)
90 
91 
92 #if defined(__ARM_FEATURE_MVE)
93 #if __ARM_FEATURE_MVE
94   #if !defined(ARM_MATH_MVEI)
95     #define ARM_MATH_MVEI
96   #endif
97 #endif
98 
99 #if (__ARM_FEATURE_MVE & 2)
100   #if !defined(ARM_MATH_MVEF)
101     #define ARM_MATH_MVEF
102   #endif
103   #if !defined(ARM_MATH_MVE_FLOAT16)
104        #define ARM_MATH_MVE_FLOAT16
105   #endif
106 #endif
107 
108 #endif /*defined(__ARM_FEATURE_MVE)*/
109 #endif /*!defined(ARM_MATH_AUTOVECTORIZE)*/
110 
111 
112 #if defined (ARM_MATH_HELIUM)
113   #if !defined(ARM_MATH_MVEF)
114     #define ARM_MATH_MVEF
115   #endif
116 
117   #if !defined(ARM_MATH_MVEI)
118     #define ARM_MATH_MVEI
119   #endif
120 
121   #if !defined(ARM_MATH_MVE_FLOAT16)
122        #define ARM_MATH_MVE_FLOAT16
123   #endif
124 #endif
125 
126 
127 
128 #if   defined ( __CC_ARM )
129   /* Enter low optimization region - place directly above function definition */
130   #if defined( __ARM_ARCH_7EM__ )
131     #define LOW_OPTIMIZATION_ENTER \
132        _Pragma ("push")         \
133        _Pragma ("O1")
134   #else
135     #define LOW_OPTIMIZATION_ENTER
136   #endif
137 
138   /* Exit low optimization region - place directly after end of function definition */
139   #if defined ( __ARM_ARCH_7EM__ )
140     #define LOW_OPTIMIZATION_EXIT \
141        _Pragma ("pop")
142   #else
143     #define LOW_OPTIMIZATION_EXIT
144   #endif
145 
146   /* Enter low optimization region - place directly above function definition */
147   #define IAR_ONLY_LOW_OPTIMIZATION_ENTER
148 
149   /* Exit low optimization region - place directly after end of function definition */
150   #define IAR_ONLY_LOW_OPTIMIZATION_EXIT
151 
152 #elif defined (__ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 )
153   #define LOW_OPTIMIZATION_ENTER
154   #define LOW_OPTIMIZATION_EXIT
155   #define IAR_ONLY_LOW_OPTIMIZATION_ENTER
156   #define IAR_ONLY_LOW_OPTIMIZATION_EXIT
157 
158 #elif defined ( __APPLE_CC__ )
159   #define LOW_OPTIMIZATION_ENTER
160   #define LOW_OPTIMIZATION_EXIT
161   #define IAR_ONLY_LOW_OPTIMIZATION_ENTER
162   #define IAR_ONLY_LOW_OPTIMIZATION_EXIT
163 
164 #elif defined ( __GNUC__ )
165   #define LOW_OPTIMIZATION_ENTER \
166        __attribute__(( optimize("-O1") ))
167   #define LOW_OPTIMIZATION_EXIT
168   #define IAR_ONLY_LOW_OPTIMIZATION_ENTER
169   #define IAR_ONLY_LOW_OPTIMIZATION_EXIT
170 
171 #elif defined ( __ICCARM__ )
172   /* Enter low optimization region - place directly above function definition */
173   #if defined ( __ARM_ARCH_7EM__ )
174     #define LOW_OPTIMIZATION_ENTER \
175        _Pragma ("optimize=low")
176   #else
177     #define LOW_OPTIMIZATION_ENTER
178   #endif
179 
180   /* Exit low optimization region - place directly after end of function definition */
181   #define LOW_OPTIMIZATION_EXIT
182 
183   /* Enter low optimization region - place directly above function definition */
184   #if defined ( __ARM_ARCH_7EM__ )
185     #define IAR_ONLY_LOW_OPTIMIZATION_ENTER \
186        _Pragma ("optimize=low")
187   #else
188     #define IAR_ONLY_LOW_OPTIMIZATION_ENTER
189   #endif
190 
191   /* Exit low optimization region - place directly after end of function definition */
192   #define IAR_ONLY_LOW_OPTIMIZATION_EXIT
193 
194 #elif defined ( __TI_ARM__ )
195   #define LOW_OPTIMIZATION_ENTER
196   #define LOW_OPTIMIZATION_EXIT
197   #define IAR_ONLY_LOW_OPTIMIZATION_ENTER
198   #define IAR_ONLY_LOW_OPTIMIZATION_EXIT
199 
200 #elif defined ( __CSMC__ )
201   #define LOW_OPTIMIZATION_ENTER
202   #define LOW_OPTIMIZATION_EXIT
203   #define IAR_ONLY_LOW_OPTIMIZATION_ENTER
204   #define IAR_ONLY_LOW_OPTIMIZATION_EXIT
205 
206 #elif defined ( __TASKING__ )
207   #define LOW_OPTIMIZATION_ENTER
208   #define LOW_OPTIMIZATION_EXIT
209   #define IAR_ONLY_LOW_OPTIMIZATION_ENTER
210   #define IAR_ONLY_LOW_OPTIMIZATION_EXIT
211 
212 #elif defined ( _MSC_VER ) || defined(__GNUC_PYTHON__)
213       #define LOW_OPTIMIZATION_ENTER
214       #define LOW_OPTIMIZATION_EXIT
215       #define IAR_ONLY_LOW_OPTIMIZATION_ENTER
216       #define IAR_ONLY_LOW_OPTIMIZATION_EXIT
217 #endif
218 
219 
220 
221 /* Compiler specific diagnostic adjustment */
222 #if   defined ( __CC_ARM )
223 
224 #elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 )
225 
226 #elif defined ( __APPLE_CC__ )
227 
228 #elif defined ( __GNUC__ )
229 #pragma GCC diagnostic pop
230 
231 #elif defined ( __ICCARM__ )
232 
233 #elif defined ( __TI_ARM__ )
234 
235 #elif defined ( __CSMC__ )
236 
237 #elif defined ( __TASKING__ )
238 
239 #elif defined ( _MSC_VER )
240 
241 #else
242   #error Unknown compiler
243 #endif
244 
245 #ifdef   __cplusplus
246 }
247 #endif
248 
249 #if defined(__ARM_FEATURE_MVE) && __ARM_FEATURE_MVE
250 #include <arm_mve.h>
251 #endif
252 
253 #if !(__ARM_FEATURE_MVE & 2)
254   #if !defined(DISABLEFLOAT16)
255     #if defined(__ARM_FP16_FORMAT_IEEE) || defined(__ARM_FP16_FORMAT_ALTERNATIVE)
256       typedef __fp16 float16_t;
257       #define ARM_FLOAT16_SUPPORTED
258     #endif
259   #endif
260 #else
261   /* When Vector float16, this flag is always defined and can't be disabled */
262   #define ARM_FLOAT16_SUPPORTED
263 #endif
264 
265 #if defined(ARM_FLOAT16_SUPPORTED)
266 
267 #if defined(__ICCARM__)
268 
269 #define F16INFINITY   ((float16_t) INFINITY)
270 
271 #else
272 
273 #define F16INFINITY ((float16_t)__builtin_inf())
274 
275 #endif
276 
277 #endif
278 
279 
280 
281 
282