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