1 /* Copyright (c) 2022 Google LLC
2 * SPDX-License-Identifier: Apache-2.0
3 */
4
5 #ifndef SUBSYS_MATH_CMSIS_BACKEND_PUBLIC_ZDSP_BACKEND_DSP_H_
6 #define SUBSYS_MATH_CMSIS_BACKEND_PUBLIC_ZDSP_BACKEND_DSP_H_
7
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11
12 /* This include MUST be done before arm_math.h so we can let the arch specific
13 * logic set up the right #define values for arm_math.h
14 */
15 #include <zephyr/kernel.h>
16
17 #include <arm_math.h>
18
zdsp_mult_q7(const q7_t * src_a,const q7_t * src_b,q7_t * dst,uint32_t block_size)19 static inline void zdsp_mult_q7(const q7_t *src_a, const q7_t *src_b, q7_t *dst,
20 uint32_t block_size)
21 {
22 arm_mult_q7(src_a, src_b, dst, block_size);
23 }
zdsp_mult_q15(const q15_t * src_a,const q15_t * src_b,q15_t * dst,uint32_t block_size)24 static inline void zdsp_mult_q15(const q15_t *src_a, const q15_t *src_b, q15_t *dst,
25 uint32_t block_size)
26 {
27 arm_mult_q15(src_a, src_b, dst, block_size);
28 }
zdsp_mult_q31(const q31_t * src_a,const q31_t * src_b,q31_t * dst,uint32_t block_size)29 static inline void zdsp_mult_q31(const q31_t *src_a, const q31_t *src_b, q31_t *dst,
30 uint32_t block_size)
31 {
32 arm_mult_q31(src_a, src_b, dst, block_size);
33 }
zdsp_mult_f32(const float32_t * src_a,const float32_t * src_b,float32_t * dst,uint32_t block_size)34 static inline void zdsp_mult_f32(const float32_t *src_a, const float32_t *src_b, float32_t *dst,
35 uint32_t block_size)
36 {
37 arm_mult_f32(src_a, src_b, dst, block_size);
38 }
39
zdsp_add_q7(const q7_t * src_a,const q7_t * src_b,q7_t * dst,uint32_t block_size)40 static inline void zdsp_add_q7(const q7_t *src_a, const q7_t *src_b, q7_t *dst, uint32_t block_size)
41 {
42 arm_add_q7(src_a, src_b, dst, block_size);
43 }
zdsp_add_q15(const q15_t * src_a,const q15_t * src_b,q15_t * dst,uint32_t block_size)44 static inline void zdsp_add_q15(const q15_t *src_a, const q15_t *src_b, q15_t *dst,
45 uint32_t block_size)
46 {
47 arm_add_q15(src_a, src_b, dst, block_size);
48 }
zdsp_add_q31(const q31_t * src_a,const q31_t * src_b,q31_t * dst,uint32_t block_size)49 static inline void zdsp_add_q31(const q31_t *src_a, const q31_t *src_b, q31_t *dst,
50 uint32_t block_size)
51 {
52 arm_add_q31(src_a, src_b, dst, block_size);
53 }
zdsp_add_f32(const float32_t * src_a,const float32_t * src_b,float32_t * dst,uint32_t block_size)54 static inline void zdsp_add_f32(const float32_t *src_a, const float32_t *src_b, float32_t *dst,
55 uint32_t block_size)
56 {
57 arm_add_f32(src_a, src_b, dst, block_size);
58 }
59
zdsp_sub_q7(const q7_t * src_a,const q7_t * src_b,q7_t * dst,uint32_t block_size)60 static inline void zdsp_sub_q7(const q7_t *src_a, const q7_t *src_b, q7_t *dst, uint32_t block_size)
61 {
62 arm_sub_q7(src_a, src_b, dst, block_size);
63 }
zdsp_sub_q15(const q15_t * src_a,const q15_t * src_b,q15_t * dst,uint32_t block_size)64 static inline void zdsp_sub_q15(const q15_t *src_a, const q15_t *src_b, q15_t *dst,
65 uint32_t block_size)
66 {
67 arm_sub_q15(src_a, src_b, dst, block_size);
68 }
zdsp_sub_q31(const q31_t * src_a,const q31_t * src_b,q31_t * dst,uint32_t block_size)69 static inline void zdsp_sub_q31(const q31_t *src_a, const q31_t *src_b, q31_t *dst,
70 uint32_t block_size)
71 {
72 arm_sub_q31(src_a, src_b, dst, block_size);
73 }
zdsp_sub_f32(const float32_t * src_a,const float32_t * src_b,float32_t * dst,uint32_t block_size)74 static inline void zdsp_sub_f32(const float32_t *src_a, const float32_t *src_b, float32_t *dst,
75 uint32_t block_size)
76 {
77 arm_sub_f32(src_a, src_b, dst, block_size);
78 }
79
zdsp_scale_q7(const q7_t * src,q7_t scale_fract,int8_t shift,q7_t * dst,uint32_t block_size)80 static inline void zdsp_scale_q7(const q7_t *src, q7_t scale_fract, int8_t shift, q7_t *dst,
81 uint32_t block_size)
82 {
83 arm_scale_q7(src, scale_fract, shift, dst, block_size);
84 }
zdsp_scale_q15(const q15_t * src,q15_t scale_fract,int8_t shift,q15_t * dst,uint32_t block_size)85 static inline void zdsp_scale_q15(const q15_t *src, q15_t scale_fract, int8_t shift, q15_t *dst,
86 uint32_t block_size)
87 {
88 arm_scale_q15(src, scale_fract, shift, dst, block_size);
89 }
zdsp_scale_q31(const q31_t * src,q31_t scale_fract,int8_t shift,q31_t * dst,uint32_t block_size)90 static inline void zdsp_scale_q31(const q31_t *src, q31_t scale_fract, int8_t shift, q31_t *dst,
91 uint32_t block_size)
92 {
93 arm_scale_q31(src, scale_fract, shift, dst, block_size);
94 }
95
zdsp_scale_f32(const float32_t * src,float32_t scale,float32_t * dst,uint32_t block_size)96 static inline void zdsp_scale_f32(const float32_t *src, float32_t scale, float32_t *dst,
97 uint32_t block_size)
98 {
99 arm_scale_f32(src, scale, dst, block_size);
100 }
101
zdsp_abs_q7(const q7_t * src,q7_t * dst,uint32_t block_size)102 static inline void zdsp_abs_q7(const q7_t *src, q7_t *dst, uint32_t block_size)
103 {
104 arm_abs_q7(src, dst, block_size);
105 }
zdsp_abs_q15(const q15_t * src,q15_t * dst,uint32_t block_size)106 static inline void zdsp_abs_q15(const q15_t *src, q15_t *dst, uint32_t block_size)
107 {
108 arm_abs_q15(src, dst, block_size);
109 }
zdsp_abs_q31(const q31_t * src,q31_t * dst,uint32_t block_size)110 static inline void zdsp_abs_q31(const q31_t *src, q31_t *dst, uint32_t block_size)
111 {
112 arm_abs_q31(src, dst, block_size);
113 }
zdsp_abs_f32(const float32_t * src,float32_t * dst,uint32_t block_size)114 static inline void zdsp_abs_f32(const float32_t *src, float32_t *dst, uint32_t block_size)
115 {
116 arm_abs_f32(src, dst, block_size);
117 }
118
zdsp_negate_q7(const q7_t * src,q7_t * dst,uint32_t block_size)119 static inline void zdsp_negate_q7(const q7_t *src, q7_t *dst, uint32_t block_size)
120 {
121 arm_negate_q7(src, dst, block_size);
122 }
zdsp_negate_q15(const q15_t * src,q15_t * dst,uint32_t block_size)123 static inline void zdsp_negate_q15(const q15_t *src, q15_t *dst, uint32_t block_size)
124 {
125 arm_negate_q15(src, dst, block_size);
126 }
zdsp_negate_q31(const q31_t * src,q31_t * dst,uint32_t block_size)127 static inline void zdsp_negate_q31(const q31_t *src, q31_t *dst, uint32_t block_size)
128 {
129 arm_negate_q31(src, dst, block_size);
130 }
zdsp_negate_f32(const float32_t * src,float32_t * dst,uint32_t block_size)131 static inline void zdsp_negate_f32(const float32_t *src, float32_t *dst, uint32_t block_size)
132 {
133 arm_negate_f32(src, dst, block_size);
134 }
135
zdsp_dot_prod_q7(const q7_t * src_a,const q7_t * src_b,uint32_t block_size,q31_t * dst)136 static inline void zdsp_dot_prod_q7(const q7_t *src_a, const q7_t *src_b, uint32_t block_size,
137 q31_t *dst)
138 {
139 arm_dot_prod_q7(src_a, src_b, block_size, dst);
140 }
zdsp_dot_prod_q15(const q15_t * src_a,const q15_t * src_b,uint32_t block_size,q63_t * dst)141 static inline void zdsp_dot_prod_q15(const q15_t *src_a, const q15_t *src_b, uint32_t block_size,
142 q63_t *dst)
143 {
144 arm_dot_prod_q15(src_a, src_b, block_size, dst);
145 }
zdsp_dot_prod_q31(const q31_t * src_a,const q31_t * src_b,uint32_t block_size,q63_t * dst)146 static inline void zdsp_dot_prod_q31(const q31_t *src_a, const q31_t *src_b, uint32_t block_size,
147 q63_t *dst)
148 {
149 arm_dot_prod_q31(src_a, src_b, block_size, dst);
150 }
zdsp_dot_prod_f32(const float32_t * src_a,const float32_t * src_b,uint32_t block_size,float32_t * dst)151 static inline void zdsp_dot_prod_f32(const float32_t *src_a, const float32_t *src_b,
152 uint32_t block_size, float32_t *dst)
153 {
154 arm_dot_prod_f32(src_a, src_b, block_size, dst);
155 }
156
zdsp_shift_q7(const q7_t * src,int8_t shift_bits,q7_t * dst,uint32_t block_size)157 static inline void zdsp_shift_q7(const q7_t *src, int8_t shift_bits, q7_t *dst, uint32_t block_size)
158 {
159 arm_shift_q7(src, shift_bits, dst, block_size);
160 }
zdsp_shift_q15(const q15_t * src,int8_t shift_bits,q15_t * dst,uint32_t block_size)161 static inline void zdsp_shift_q15(const q15_t *src, int8_t shift_bits, q15_t *dst,
162 uint32_t block_size)
163 {
164 arm_shift_q15(src, shift_bits, dst, block_size);
165 }
zdsp_shift_q31(const q31_t * src,int8_t shift_bits,q31_t * dst,uint32_t block_size)166 static inline void zdsp_shift_q31(const q31_t *src, int8_t shift_bits, q31_t *dst,
167 uint32_t block_size)
168 {
169 arm_shift_q31(src, shift_bits, dst, block_size);
170 }
171
zdsp_offset_q7(const q7_t * src,q7_t offset,q7_t * dst,uint32_t block_size)172 static inline void zdsp_offset_q7(const q7_t *src, q7_t offset, q7_t *dst, uint32_t block_size)
173 {
174 arm_offset_q7(src, offset, dst, block_size);
175 }
zdsp_offset_q15(const q15_t * src,q15_t offset,q15_t * dst,uint32_t block_size)176 static inline void zdsp_offset_q15(const q15_t *src, q15_t offset, q15_t *dst, uint32_t block_size)
177 {
178 arm_offset_q15(src, offset, dst, block_size);
179 }
zdsp_offset_q31(const q31_t * src,q31_t offset,q31_t * dst,uint32_t block_size)180 static inline void zdsp_offset_q31(const q31_t *src, q31_t offset, q31_t *dst, uint32_t block_size)
181 {
182 arm_offset_q31(src, offset, dst, block_size);
183 }
zdsp_offset_f32(const float32_t * src,float32_t offset,float32_t * dst,uint32_t block_size)184 static inline void zdsp_offset_f32(const float32_t *src, float32_t offset, float32_t *dst,
185 uint32_t block_size)
186 {
187 arm_offset_f32(src, offset, dst, block_size);
188 }
189
zdsp_clip_q7(const q7_t * src,q7_t * dst,q7_t low,q7_t high,uint32_t num_samples)190 static inline void zdsp_clip_q7(const q7_t *src, q7_t *dst, q7_t low, q7_t high,
191 uint32_t num_samples)
192 {
193 arm_clip_q7(src, dst, low, high, num_samples);
194 }
zdsp_clip_q15(const q15_t * src,q15_t * dst,q15_t low,q15_t high,uint32_t num_samples)195 static inline void zdsp_clip_q15(const q15_t *src, q15_t *dst, q15_t low, q15_t high,
196 uint32_t num_samples)
197 {
198 arm_clip_q15(src, dst, low, high, num_samples);
199 }
zdsp_clip_q31(const q31_t * src,q31_t * dst,q31_t low,q31_t high,uint32_t num_samples)200 static inline void zdsp_clip_q31(const q31_t *src, q31_t *dst, q31_t low, q31_t high,
201 uint32_t num_samples)
202 {
203 arm_clip_q31(src, dst, low, high, num_samples);
204 }
zdsp_clip_f32(const float32_t * src,float32_t * dst,float32_t low,float32_t high,uint32_t num_samples)205 static inline void zdsp_clip_f32(const float32_t *src, float32_t *dst, float32_t low,
206 float32_t high, uint32_t num_samples)
207 {
208 arm_clip_f32(src, dst, low, high, num_samples);
209 }
210
zdsp_and_u8(const uint8_t * src_a,const uint8_t * src_b,uint8_t * dst,uint32_t block_size)211 static inline void zdsp_and_u8(const uint8_t *src_a, const uint8_t *src_b, uint8_t *dst,
212 uint32_t block_size)
213 {
214 arm_and_u8(src_a, src_b, dst, block_size);
215 }
zdsp_and_u16(const uint16_t * src_a,const uint16_t * src_b,uint16_t * dst,uint32_t block_size)216 static inline void zdsp_and_u16(const uint16_t *src_a, const uint16_t *src_b, uint16_t *dst,
217 uint32_t block_size)
218 {
219 arm_and_u16(src_a, src_b, dst, block_size);
220 }
zdsp_and_u32(const uint32_t * src_a,const uint32_t * src_b,uint32_t * dst,uint32_t block_size)221 static inline void zdsp_and_u32(const uint32_t *src_a, const uint32_t *src_b, uint32_t *dst,
222 uint32_t block_size)
223 {
224 arm_and_u32(src_a, src_b, dst, block_size);
225 }
226
zdsp_or_u8(const uint8_t * src_a,const uint8_t * src_b,uint8_t * dst,uint32_t block_size)227 static inline void zdsp_or_u8(const uint8_t *src_a, const uint8_t *src_b, uint8_t *dst,
228 uint32_t block_size)
229 {
230 arm_or_u8(src_a, src_b, dst, block_size);
231 }
zdsp_or_u16(const uint16_t * src_a,const uint16_t * src_b,uint16_t * dst,uint32_t block_size)232 static inline void zdsp_or_u16(const uint16_t *src_a, const uint16_t *src_b, uint16_t *dst,
233 uint32_t block_size)
234 {
235 arm_or_u16(src_a, src_b, dst, block_size);
236 }
zdsp_or_u32(const uint32_t * src_a,const uint32_t * src_b,uint32_t * dst,uint32_t block_size)237 static inline void zdsp_or_u32(const uint32_t *src_a, const uint32_t *src_b, uint32_t *dst,
238 uint32_t block_size)
239 {
240 arm_or_u32(src_a, src_b, dst, block_size);
241 }
242
zdsp_xor_u8(const uint8_t * src_a,const uint8_t * src_b,uint8_t * dst,uint32_t block_size)243 static inline void zdsp_xor_u8(const uint8_t *src_a, const uint8_t *src_b, uint8_t *dst,
244 uint32_t block_size)
245 {
246 arm_xor_u8(src_a, src_b, dst, block_size);
247 }
zdsp_xor_u16(const uint16_t * src_a,const uint16_t * src_b,uint16_t * dst,uint32_t block_size)248 static inline void zdsp_xor_u16(const uint16_t *src_a, const uint16_t *src_b, uint16_t *dst,
249 uint32_t block_size)
250 {
251 arm_xor_u16(src_a, src_b, dst, block_size);
252 }
zdsp_xor_u32(const uint32_t * src_a,const uint32_t * src_b,uint32_t * dst,uint32_t block_size)253 static inline void zdsp_xor_u32(const uint32_t *src_a, const uint32_t *src_b, uint32_t *dst,
254 uint32_t block_size)
255 {
256 arm_xor_u32(src_a, src_b, dst, block_size);
257 }
258
zdsp_not_u8(const uint8_t * src,uint8_t * dst,uint32_t block_size)259 static inline void zdsp_not_u8(const uint8_t *src, uint8_t *dst, uint32_t block_size)
260 {
261 arm_not_u8(src, dst, block_size);
262 }
zdsp_not_u16(const uint16_t * src,uint16_t * dst,uint32_t block_size)263 static inline void zdsp_not_u16(const uint16_t *src, uint16_t *dst, uint32_t block_size)
264 {
265 arm_not_u16(src, dst, block_size);
266 }
zdsp_not_u32(const uint32_t * src,uint32_t * dst,uint32_t block_size)267 static inline void zdsp_not_u32(const uint32_t *src, uint32_t *dst, uint32_t block_size)
268 {
269 arm_not_u32(src, dst, block_size);
270 }
271
272 #ifdef __cplusplus
273 }
274 #endif
275
276 #ifdef CONFIG_FP16
277 #include "zdsp_backend_f16.h"
278 #endif /* COIFNG_FP16 */
279
280 #endif /* SUBSYS_MATH_CMSIS_BACKEND_PUBLIC_ZDSP_BACKEND_DSP_H_ */
281