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