1 /* ----------------------------------------------------------------------
2  * Project:      CMSIS DSP Python Wrapper
3  * Title:        cmsismodule.h
4  * Description:  C code for the CMSIS-DSP Python wrapper
5  *
6  * $Date:        27 April 2021
7  * $Revision:    V1.0
8  *
9  * Target Processor: Cortex-M cores
10  * -------------------------------------------------------------------- */
11 /*
12  * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
13  *
14  * SPDX-License-Identifier: Apache-2.0
15  *
16  * Licensed under the Apache License, Version 2.0 (the License); you may
17  * not use this file except in compliance with the License.
18  * You may obtain a copy of the License at
19  *
20  * www.apache.org/licenses/LICENSE-2.0
21  *
22  * Unless required by applicable law or agreed to in writing, software
23  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
24  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25  * See the License for the specific language governing permissions and
26  * limitations under the License.
27  */
28 
29 #define MODNAME "cmsisdsp_basic"
30 #define MODINITNAME cmsisdsp_basic
31 
32 #include "cmsisdsp_module.h"
33 
34 
35 NUMPYVECTORFROMBUFFER(f32,float32_t,NPY_FLOAT);
36 
37 
typeRegistration(PyObject * module)38 void typeRegistration(PyObject *module) {
39 
40 
41 }
42 
43 
44 static PyObject *
cmsis_arm_recip_q31(PyObject * obj,PyObject * args)45 cmsis_arm_recip_q31(PyObject *obj, PyObject *args)
46 {
47 
48   q31_t in; // input
49   q31_t dst; // output
50   PyObject *pRecipTable=NULL; // input
51   q31_t *pRecipTable_converted=NULL; // input
52 
53   if (PyArg_ParseTuple(args,"iO",&in,&pRecipTable))
54   {
55 
56     GETARGUMENT(pRecipTable,NPY_INT32,int32_t,int32_t);
57 
58 
59     uint32_t returnValue = arm_recip_q31(in,&dst,pRecipTable_converted);
60     PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
61     PyObject* dstOBJ=Py_BuildValue("i",dst);
62 
63     PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,dstOBJ);
64 
65     Py_DECREF(theReturnOBJ);
66     Py_DECREF(dstOBJ);
67     FREEARGUMENT(pRecipTable_converted);
68     return(pythonResult);
69 
70   }
71   return(NULL);
72 }
73 
74 
75 static PyObject *
cmsis_arm_recip_q15(PyObject * obj,PyObject * args)76 cmsis_arm_recip_q15(PyObject *obj, PyObject *args)
77 {
78 
79   q15_t in; // input
80   q15_t dst; // output
81   PyObject *pRecipTable=NULL; // input
82   q15_t *pRecipTable_converted=NULL; // input
83 
84   if (PyArg_ParseTuple(args,"hO",&in,&pRecipTable))
85   {
86 
87     GETARGUMENT(pRecipTable,NPY_INT16,int16_t,int16_t);
88 
89 
90     uint32_t returnValue = arm_recip_q15(in,&dst,pRecipTable_converted);
91     PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
92     PyObject* dstOBJ=Py_BuildValue("h",dst);
93 
94     PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,dstOBJ);
95 
96     Py_DECREF(theReturnOBJ);
97     Py_DECREF(dstOBJ);
98     FREEARGUMENT(pRecipTable_converted);
99     return(pythonResult);
100 
101   }
102   return(NULL);
103 }
104 
105 
106 static PyObject *
cmsis_arm_mult_q7(PyObject * obj,PyObject * args)107 cmsis_arm_mult_q7(PyObject *obj, PyObject *args)
108 {
109 
110   PyObject *pSrcA=NULL; // input
111   q7_t *pSrcA_converted=NULL; // input
112   PyObject *pSrcB=NULL; // input
113   q7_t *pSrcB_converted=NULL; // input
114   q7_t *pDst=NULL; // output
115   uint32_t blockSize; // input
116 
117   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
118   {
119 
120     GETARGUMENT(pSrcA,NPY_BYTE,int8_t,q7_t);
121     GETARGUMENT(pSrcB,NPY_BYTE,int8_t,q7_t);
122     blockSize = arraySizepSrcA ;
123 
124     pDst=PyMem_Malloc(sizeof(q7_t)*blockSize);
125 
126 
127     arm_mult_q7(pSrcA_converted,pSrcB_converted,pDst,blockSize);
128  INT8ARRAY1(pDstOBJ,blockSize,pDst);
129 
130     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
131 
132     FREEARGUMENT(pSrcA_converted);
133     FREEARGUMENT(pSrcB_converted);
134     Py_DECREF(pDstOBJ);
135     return(pythonResult);
136 
137   }
138   return(NULL);
139 }
140 
141 
142 static PyObject *
cmsis_arm_mult_q15(PyObject * obj,PyObject * args)143 cmsis_arm_mult_q15(PyObject *obj, PyObject *args)
144 {
145 
146   PyObject *pSrcA=NULL; // input
147   q15_t *pSrcA_converted=NULL; // input
148   PyObject *pSrcB=NULL; // input
149   q15_t *pSrcB_converted=NULL; // input
150   q15_t *pDst=NULL; // output
151   uint32_t blockSize; // input
152 
153   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
154   {
155 
156     GETARGUMENT(pSrcA,NPY_INT16,int16_t,int16_t);
157     GETARGUMENT(pSrcB,NPY_INT16,int16_t,int16_t);
158     blockSize = arraySizepSrcA ;
159 
160     pDst=PyMem_Malloc(sizeof(q15_t)*blockSize);
161 
162 
163     arm_mult_q15(pSrcA_converted,pSrcB_converted,pDst,blockSize);
164  INT16ARRAY1(pDstOBJ,blockSize,pDst);
165 
166     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
167 
168     FREEARGUMENT(pSrcA_converted);
169     FREEARGUMENT(pSrcB_converted);
170     Py_DECREF(pDstOBJ);
171     return(pythonResult);
172 
173   }
174   return(NULL);
175 }
176 
177 
178 static PyObject *
cmsis_arm_mult_q31(PyObject * obj,PyObject * args)179 cmsis_arm_mult_q31(PyObject *obj, PyObject *args)
180 {
181 
182   PyObject *pSrcA=NULL; // input
183   q31_t *pSrcA_converted=NULL; // input
184   PyObject *pSrcB=NULL; // input
185   q31_t *pSrcB_converted=NULL; // input
186   q31_t *pDst=NULL; // output
187   uint32_t blockSize; // input
188 
189   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
190   {
191 
192     GETARGUMENT(pSrcA,NPY_INT32,int32_t,int32_t);
193     GETARGUMENT(pSrcB,NPY_INT32,int32_t,int32_t);
194     blockSize = arraySizepSrcA ;
195 
196     pDst=PyMem_Malloc(sizeof(q31_t)*blockSize);
197 
198 
199     arm_mult_q31(pSrcA_converted,pSrcB_converted,pDst,blockSize);
200  INT32ARRAY1(pDstOBJ,blockSize,pDst);
201 
202     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
203 
204     FREEARGUMENT(pSrcA_converted);
205     FREEARGUMENT(pSrcB_converted);
206     Py_DECREF(pDstOBJ);
207     return(pythonResult);
208 
209   }
210   return(NULL);
211 }
212 
213 
214 static PyObject *
cmsis_arm_mult_f32(PyObject * obj,PyObject * args)215 cmsis_arm_mult_f32(PyObject *obj, PyObject *args)
216 {
217 
218   PyObject *pSrcA=NULL; // input
219   float32_t *pSrcA_converted=NULL; // input
220   PyObject *pSrcB=NULL; // input
221   float32_t *pSrcB_converted=NULL; // input
222   float32_t *pDst=NULL; // output
223   uint32_t blockSize; // input
224 
225   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
226   {
227 
228     GETARGUMENT(pSrcA,NPY_DOUBLE,double,float32_t);
229     GETARGUMENT(pSrcB,NPY_DOUBLE,double,float32_t);
230     blockSize = arraySizepSrcA ;
231 
232     pDst=PyMem_Malloc(sizeof(float32_t)*blockSize);
233 
234 
235     arm_mult_f32(pSrcA_converted,pSrcB_converted,pDst,blockSize);
236  FLOATARRAY1(pDstOBJ,blockSize,pDst);
237 
238     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
239 
240     FREEARGUMENT(pSrcA_converted);
241     FREEARGUMENT(pSrcB_converted);
242     Py_DECREF(pDstOBJ);
243     return(pythonResult);
244 
245   }
246   return(NULL);
247 }
248 
249 static PyObject *
cmsis_arm_mult_f64(PyObject * obj,PyObject * args)250 cmsis_arm_mult_f64(PyObject *obj, PyObject *args)
251 {
252 
253   PyObject *pSrcA=NULL; // input
254   float64_t *pSrcA_converted=NULL; // input
255   PyObject *pSrcB=NULL; // input
256   float64_t *pSrcB_converted=NULL; // input
257   float64_t *pDst=NULL; // output
258   uint32_t blockSize; // input
259 
260   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
261   {
262 
263     GETARGUMENT(pSrcA,NPY_DOUBLE,double,float64_t);
264     GETARGUMENT(pSrcB,NPY_DOUBLE,double,float64_t);
265     blockSize = arraySizepSrcA ;
266 
267     pDst=PyMem_Malloc(sizeof(float64_t)*blockSize);
268 
269 
270     arm_mult_f64(pSrcA_converted,pSrcB_converted,pDst,blockSize);
271  FLOAT64ARRAY1(pDstOBJ,blockSize,pDst);
272 
273     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
274 
275     FREEARGUMENT(pSrcA_converted);
276     FREEARGUMENT(pSrcB_converted);
277     Py_DECREF(pDstOBJ);
278     return(pythonResult);
279 
280   }
281   return(NULL);
282 }
283 
284 
285 
286 static PyObject *
cmsis_arm_add_f32(PyObject * obj,PyObject * args)287 cmsis_arm_add_f32(PyObject *obj, PyObject *args)
288 {
289 
290   PyObject *pSrcA=NULL; // input
291   float32_t *pSrcA_converted=NULL; // input
292   PyObject *pSrcB=NULL; // input
293   float32_t *pSrcB_converted=NULL; // input
294   float32_t *pDst=NULL; // output
295   uint32_t blockSize; // input
296 
297   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
298   {
299 
300     GETARGUMENT(pSrcA,NPY_DOUBLE,double,float32_t);
301     GETARGUMENT(pSrcB,NPY_DOUBLE,double,float32_t);
302     blockSize = arraySizepSrcA ;
303 
304     pDst=PyMem_Malloc(sizeof(float32_t)*blockSize);
305 
306 
307     arm_add_f32(pSrcA_converted,pSrcB_converted,pDst,blockSize);
308  FLOATARRAY1(pDstOBJ,blockSize,pDst);
309 
310     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
311 
312     FREEARGUMENT(pSrcA_converted);
313     FREEARGUMENT(pSrcB_converted);
314     Py_DECREF(pDstOBJ);
315     return(pythonResult);
316 
317   }
318   return(NULL);
319 }
320 
321 static PyObject *
cmsis_arm_add_f64(PyObject * obj,PyObject * args)322 cmsis_arm_add_f64(PyObject *obj, PyObject *args)
323 {
324 
325   PyObject *pSrcA=NULL; // input
326   float64_t *pSrcA_converted=NULL; // input
327   PyObject *pSrcB=NULL; // input
328   float64_t *pSrcB_converted=NULL; // input
329   float64_t *pDst=NULL; // output
330   uint32_t blockSize; // input
331 
332   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
333   {
334 
335     GETARGUMENT(pSrcA,NPY_DOUBLE,double,float64_t);
336     GETARGUMENT(pSrcB,NPY_DOUBLE,double,float64_t);
337     blockSize = arraySizepSrcA ;
338 
339     pDst=PyMem_Malloc(sizeof(float64_t)*blockSize);
340 
341 
342     arm_add_f64(pSrcA_converted,pSrcB_converted,pDst,blockSize);
343  FLOAT64ARRAY1(pDstOBJ,blockSize,pDst);
344 
345     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
346 
347     FREEARGUMENT(pSrcA_converted);
348     FREEARGUMENT(pSrcB_converted);
349     Py_DECREF(pDstOBJ);
350     return(pythonResult);
351 
352   }
353   return(NULL);
354 }
355 
356 /*
357 
358 For the arm_(and|xor|or)_u(32|16|8)
359 
360 */
361 
362 #define U_UN_OP(OP,TYP,EXT,NPYTYPE)                     \
363 static PyObject *                                       \
364 cmsis_arm_##OP##_##EXT(PyObject *obj, PyObject *args)   \
365 {                                                       \
366                                                         \
367   PyObject *pSrcA=NULL;                                 \
368   TYP *pSrcA_converted=NULL;                            \
369   TYP *pDst=NULL;                                       \
370   uint32_t blockSize;                                   \
371                                                         \
372   if (PyArg_ParseTuple(args,"O",&pSrcA))                \
373   {                                                     \
374                                                         \
375     GETARGUMENT(pSrcA,NPYTYPE,TYP,TYP);                 \
376     blockSize = arraySizepSrcA ;                        \
377                                                         \
378     pDst=PyMem_Malloc(sizeof(TYP)*blockSize);           \
379                                                         \
380                                                         \
381     arm_##OP##_##EXT(pSrcA_converted,pDst,blockSize);   \
382  TYP_ARRAY1(pDstOBJ,blockSize,pDst,NPYTYPE);            \
383                                                         \
384     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);\
385                                                         \
386     FREEARGUMENT(pSrcA_converted);                      \
387     Py_DECREF(pDstOBJ);                                 \
388     return(pythonResult);                               \
389                                                         \
390   }                                                     \
391   return(NULL);                                         \
392 }
393 
394 #define U_BIN_OP(OP,TYP,EXT,NPYTYPE)                                 \
395 static PyObject *                                                    \
396 cmsis_arm_##OP##_##EXT(PyObject *obj, PyObject *args)                \
397 {                                                                    \
398                                                                      \
399   PyObject *pSrcA=NULL;                                              \
400   TYP *pSrcA_converted=NULL;                                         \
401   PyObject *pSrcB=NULL;                                              \
402   TYP *pSrcB_converted=NULL;                                         \
403   TYP *pDst=NULL;                                                    \
404   uint32_t blockSize;                                                \
405                                                                      \
406   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))                     \
407   {                                                                  \
408                                                                      \
409     GETARGUMENT(pSrcA,NPYTYPE,TYP,TYP);                              \
410     GETARGUMENT(pSrcB,NPYTYPE,TYP,TYP);                              \
411     blockSize = arraySizepSrcA ;                                     \
412                                                                      \
413     pDst=PyMem_Malloc(sizeof(TYP)*blockSize);                        \
414                                                                      \
415                                                                      \
416     arm_##OP##_##EXT(pSrcA_converted,pSrcB_converted,pDst,blockSize);\
417  TYP_ARRAY1(pDstOBJ,blockSize,pDst,NPYTYPE);                         \
418                                                                      \
419     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);             \
420                                                                      \
421     FREEARGUMENT(pSrcA_converted);                                   \
422     FREEARGUMENT(pSrcB_converted);                                   \
423     Py_DECREF(pDstOBJ);                                              \
424     return(pythonResult);                                            \
425                                                                      \
426   }                                                                  \
427   return(NULL);                                                      \
428 }
429 
430 U_BIN_OP(and,uint32_t,u32,NPY_UINT32);
431 U_BIN_OP(and,uint16_t,u16,NPY_UINT16);
432 U_BIN_OP(and,uint8_t,u8,NPY_UINT8);
433 
434 U_BIN_OP(or,uint32_t,u32,NPY_UINT32);
435 U_BIN_OP(or,uint16_t,u16,NPY_UINT16);
436 U_BIN_OP(or,uint8_t,u8,NPY_UINT8);
437 
438 U_BIN_OP(xor,uint32_t,u32,NPY_UINT32);
439 U_BIN_OP(xor,uint16_t,u16,NPY_UINT16);
440 U_BIN_OP(xor,uint8_t,u8,NPY_UINT8);
441 
442 U_UN_OP(not,uint32_t,u32,NPY_UINT32);
443 U_UN_OP(not,uint16_t,u16,NPY_UINT16);
444 U_UN_OP(not,uint8_t,u8,NPY_UINT8);
445 
446 static PyObject *
cmsis_arm_add_q7(PyObject * obj,PyObject * args)447 cmsis_arm_add_q7(PyObject *obj, PyObject *args)
448 {
449 
450   PyObject *pSrcA=NULL; // input
451   q7_t *pSrcA_converted=NULL; // input
452   PyObject *pSrcB=NULL; // input
453   q7_t *pSrcB_converted=NULL; // input
454   q7_t *pDst=NULL; // output
455   uint32_t blockSize; // input
456 
457   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
458   {
459 
460     GETARGUMENT(pSrcA,NPY_BYTE,int8_t,q7_t);
461     GETARGUMENT(pSrcB,NPY_BYTE,int8_t,q7_t);
462     blockSize = arraySizepSrcA ;
463 
464     pDst=PyMem_Malloc(sizeof(q7_t)*blockSize);
465 
466 
467     arm_add_q7(pSrcA_converted,pSrcB_converted,pDst,blockSize);
468  INT8ARRAY1(pDstOBJ,blockSize,pDst);
469 
470     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
471 
472     FREEARGUMENT(pSrcA_converted);
473     FREEARGUMENT(pSrcB_converted);
474     Py_DECREF(pDstOBJ);
475     return(pythonResult);
476 
477   }
478   return(NULL);
479 }
480 
481 
482 static PyObject *
cmsis_arm_add_q15(PyObject * obj,PyObject * args)483 cmsis_arm_add_q15(PyObject *obj, PyObject *args)
484 {
485 
486   PyObject *pSrcA=NULL; // input
487   q15_t *pSrcA_converted=NULL; // input
488   PyObject *pSrcB=NULL; // input
489   q15_t *pSrcB_converted=NULL; // input
490   q15_t *pDst=NULL; // output
491   uint32_t blockSize; // input
492 
493   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
494   {
495 
496     GETARGUMENT(pSrcA,NPY_INT16,int16_t,int16_t);
497     GETARGUMENT(pSrcB,NPY_INT16,int16_t,int16_t);
498     blockSize = arraySizepSrcA ;
499 
500     pDst=PyMem_Malloc(sizeof(q15_t)*blockSize);
501 
502 
503     arm_add_q15(pSrcA_converted,pSrcB_converted,pDst,blockSize);
504  INT16ARRAY1(pDstOBJ,blockSize,pDst);
505 
506     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
507 
508     FREEARGUMENT(pSrcA_converted);
509     FREEARGUMENT(pSrcB_converted);
510     Py_DECREF(pDstOBJ);
511     return(pythonResult);
512 
513   }
514   return(NULL);
515 }
516 
517 
518 static PyObject *
cmsis_arm_add_q31(PyObject * obj,PyObject * args)519 cmsis_arm_add_q31(PyObject *obj, PyObject *args)
520 {
521 
522   PyObject *pSrcA=NULL; // input
523   q31_t *pSrcA_converted=NULL; // input
524   PyObject *pSrcB=NULL; // input
525   q31_t *pSrcB_converted=NULL; // input
526   q31_t *pDst=NULL; // output
527   uint32_t blockSize; // input
528 
529   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
530   {
531 
532     GETARGUMENT(pSrcA,NPY_INT32,int32_t,int32_t);
533     GETARGUMENT(pSrcB,NPY_INT32,int32_t,int32_t);
534     blockSize = arraySizepSrcA ;
535 
536     pDst=PyMem_Malloc(sizeof(q31_t)*blockSize);
537 
538 
539     arm_add_q31(pSrcA_converted,pSrcB_converted,pDst,blockSize);
540  INT32ARRAY1(pDstOBJ,blockSize,pDst);
541 
542     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
543 
544     FREEARGUMENT(pSrcA_converted);
545     FREEARGUMENT(pSrcB_converted);
546     Py_DECREF(pDstOBJ);
547     return(pythonResult);
548 
549   }
550   return(NULL);
551 }
552 
553 
554 static PyObject *
cmsis_arm_sub_f32(PyObject * obj,PyObject * args)555 cmsis_arm_sub_f32(PyObject *obj, PyObject *args)
556 {
557 
558   PyObject *pSrcA=NULL; // input
559   float32_t *pSrcA_converted=NULL; // input
560   PyObject *pSrcB=NULL; // input
561   float32_t *pSrcB_converted=NULL; // input
562   float32_t *pDst=NULL; // output
563   uint32_t blockSize; // input
564 
565   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
566   {
567 
568     GETARGUMENT(pSrcA,NPY_DOUBLE,double,float32_t);
569     GETARGUMENT(pSrcB,NPY_DOUBLE,double,float32_t);
570     blockSize = arraySizepSrcA ;
571 
572     pDst=PyMem_Malloc(sizeof(float32_t)*blockSize);
573 
574 
575     arm_sub_f32(pSrcA_converted,pSrcB_converted,pDst,blockSize);
576  FLOATARRAY1(pDstOBJ,blockSize,pDst);
577 
578     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
579 
580     FREEARGUMENT(pSrcA_converted);
581     FREEARGUMENT(pSrcB_converted);
582     Py_DECREF(pDstOBJ);
583     return(pythonResult);
584 
585   }
586   return(NULL);
587 }
588 
589 static PyObject *
cmsis_arm_sub_f64(PyObject * obj,PyObject * args)590 cmsis_arm_sub_f64(PyObject *obj, PyObject *args)
591 {
592 
593   PyObject *pSrcA=NULL; // input
594   float64_t *pSrcA_converted=NULL; // input
595   PyObject *pSrcB=NULL; // input
596   float64_t *pSrcB_converted=NULL; // input
597   float64_t *pDst=NULL; // output
598   uint32_t blockSize; // input
599 
600   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
601   {
602 
603     GETARGUMENT(pSrcA,NPY_DOUBLE,double,float64_t);
604     GETARGUMENT(pSrcB,NPY_DOUBLE,double,float64_t);
605     blockSize = arraySizepSrcA ;
606 
607     pDst=PyMem_Malloc(sizeof(float64_t)*blockSize);
608 
609 
610     arm_sub_f64(pSrcA_converted,pSrcB_converted,pDst,blockSize);
611  FLOAT64ARRAY1(pDstOBJ,blockSize,pDst);
612 
613     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
614 
615     FREEARGUMENT(pSrcA_converted);
616     FREEARGUMENT(pSrcB_converted);
617     Py_DECREF(pDstOBJ);
618     return(pythonResult);
619 
620   }
621   return(NULL);
622 }
623 
624 
625 static PyObject *
cmsis_arm_sub_q7(PyObject * obj,PyObject * args)626 cmsis_arm_sub_q7(PyObject *obj, PyObject *args)
627 {
628 
629   PyObject *pSrcA=NULL; // input
630   q7_t *pSrcA_converted=NULL; // input
631   PyObject *pSrcB=NULL; // input
632   q7_t *pSrcB_converted=NULL; // input
633   q7_t *pDst=NULL; // output
634   uint32_t blockSize; // input
635 
636   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
637   {
638 
639     GETARGUMENT(pSrcA,NPY_BYTE,int8_t,q7_t);
640     GETARGUMENT(pSrcB,NPY_BYTE,int8_t,q7_t);
641     blockSize = arraySizepSrcA ;
642 
643     pDst=PyMem_Malloc(sizeof(q7_t)*blockSize);
644 
645 
646     arm_sub_q7(pSrcA_converted,pSrcB_converted,pDst,blockSize);
647  INT8ARRAY1(pDstOBJ,blockSize,pDst);
648 
649     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
650 
651     FREEARGUMENT(pSrcA_converted);
652     FREEARGUMENT(pSrcB_converted);
653     Py_DECREF(pDstOBJ);
654     return(pythonResult);
655 
656   }
657   return(NULL);
658 }
659 
660 
661 static PyObject *
cmsis_arm_sub_q15(PyObject * obj,PyObject * args)662 cmsis_arm_sub_q15(PyObject *obj, PyObject *args)
663 {
664 
665   PyObject *pSrcA=NULL; // input
666   q15_t *pSrcA_converted=NULL; // input
667   PyObject *pSrcB=NULL; // input
668   q15_t *pSrcB_converted=NULL; // input
669   q15_t *pDst=NULL; // output
670   uint32_t blockSize; // input
671 
672   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
673   {
674 
675     GETARGUMENT(pSrcA,NPY_INT16,int16_t,int16_t);
676     GETARGUMENT(pSrcB,NPY_INT16,int16_t,int16_t);
677     blockSize = arraySizepSrcA ;
678 
679     pDst=PyMem_Malloc(sizeof(q15_t)*blockSize);
680 
681 
682     arm_sub_q15(pSrcA_converted,pSrcB_converted,pDst,blockSize);
683  INT16ARRAY1(pDstOBJ,blockSize,pDst);
684 
685     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
686 
687     FREEARGUMENT(pSrcA_converted);
688     FREEARGUMENT(pSrcB_converted);
689     Py_DECREF(pDstOBJ);
690     return(pythonResult);
691 
692   }
693   return(NULL);
694 }
695 
696 
697 static PyObject *
cmsis_arm_sub_q31(PyObject * obj,PyObject * args)698 cmsis_arm_sub_q31(PyObject *obj, PyObject *args)
699 {
700 
701   PyObject *pSrcA=NULL; // input
702   q31_t *pSrcA_converted=NULL; // input
703   PyObject *pSrcB=NULL; // input
704   q31_t *pSrcB_converted=NULL; // input
705   q31_t *pDst=NULL; // output
706   uint32_t blockSize; // input
707 
708   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
709   {
710 
711     GETARGUMENT(pSrcA,NPY_INT32,int32_t,int32_t);
712     GETARGUMENT(pSrcB,NPY_INT32,int32_t,int32_t);
713     blockSize = arraySizepSrcA ;
714 
715     pDst=PyMem_Malloc(sizeof(q31_t)*blockSize);
716 
717 
718     arm_sub_q31(pSrcA_converted,pSrcB_converted,pDst,blockSize);
719  INT32ARRAY1(pDstOBJ,blockSize,pDst);
720 
721     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
722 
723     FREEARGUMENT(pSrcA_converted);
724     FREEARGUMENT(pSrcB_converted);
725     Py_DECREF(pDstOBJ);
726     return(pythonResult);
727 
728   }
729   return(NULL);
730 }
731 
732 
733 static PyObject *
cmsis_arm_scale_f32(PyObject * obj,PyObject * args)734 cmsis_arm_scale_f32(PyObject *obj, PyObject *args)
735 {
736 
737   PyObject *pSrc=NULL; // input
738   float32_t *pSrc_converted=NULL; // input
739   float32_t scale; // input
740   float32_t *pDst=NULL; // output
741   uint32_t blockSize; // input
742 
743   if (PyArg_ParseTuple(args,"Of",&pSrc,&scale))
744   {
745 
746     GETARGUMENT(pSrc,NPY_DOUBLE,double,float32_t);
747     blockSize = arraySizepSrc ;
748 
749     pDst=PyMem_Malloc(sizeof(float32_t)*blockSize);
750 
751 
752     arm_scale_f32(pSrc_converted,scale,pDst,blockSize);
753  FLOATARRAY1(pDstOBJ,blockSize,pDst);
754 
755     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
756 
757     FREEARGUMENT(pSrc_converted);
758     Py_DECREF(pDstOBJ);
759     return(pythonResult);
760 
761   }
762   return(NULL);
763 }
764 
765 static PyObject *
cmsis_arm_scale_f64(PyObject * obj,PyObject * args)766 cmsis_arm_scale_f64(PyObject *obj, PyObject *args)
767 {
768 
769   PyObject *pSrc=NULL; // input
770   float64_t *pSrc_converted=NULL; // input
771   float64_t scale; // input
772   float64_t *pDst=NULL; // output
773   uint32_t blockSize; // input
774 
775   if (PyArg_ParseTuple(args,"Od",&pSrc,&scale))
776   {
777 
778     GETARGUMENT(pSrc,NPY_DOUBLE,double,float64_t);
779     blockSize = arraySizepSrc ;
780 
781     pDst=PyMem_Malloc(sizeof(float64_t)*blockSize);
782 
783 
784     arm_scale_f64(pSrc_converted,scale,pDst,blockSize);
785  FLOAT64ARRAY1(pDstOBJ,blockSize,pDst);
786 
787     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
788 
789     FREEARGUMENT(pSrc_converted);
790     Py_DECREF(pDstOBJ);
791     return(pythonResult);
792 
793   }
794   return(NULL);
795 }
796 
797 
798 static PyObject *
cmsis_arm_scale_q7(PyObject * obj,PyObject * args)799 cmsis_arm_scale_q7(PyObject *obj, PyObject *args)
800 {
801 
802   PyObject *pSrc=NULL; // input
803   q7_t *pSrc_converted=NULL; // input
804   int32_t scaleFract; // input
805   int32_t shift; // input
806   q7_t *pDst=NULL; // output
807   uint32_t blockSize; // input
808 
809   if (PyArg_ParseTuple(args,"Oii",&pSrc,&scaleFract,&shift))
810   {
811 
812     GETARGUMENT(pSrc,NPY_BYTE,int8_t,q7_t);
813     blockSize = arraySizepSrc ;
814 
815     pDst=PyMem_Malloc(sizeof(q7_t)*blockSize);
816 
817 
818     arm_scale_q7(pSrc_converted,(q7_t)scaleFract,(int8_t)shift,pDst,blockSize);
819  INT8ARRAY1(pDstOBJ,blockSize,pDst);
820 
821     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
822 
823     FREEARGUMENT(pSrc_converted);
824     Py_DECREF(pDstOBJ);
825     return(pythonResult);
826 
827   }
828   return(NULL);
829 }
830 
831 
832 static PyObject *
cmsis_arm_scale_q15(PyObject * obj,PyObject * args)833 cmsis_arm_scale_q15(PyObject *obj, PyObject *args)
834 {
835 
836   PyObject *pSrc=NULL; // input
837   q15_t *pSrc_converted=NULL; // input
838   q15_t scaleFract; // input
839   int32_t shift; // input
840   q15_t *pDst=NULL; // output
841   uint32_t blockSize; // input
842 
843   if (PyArg_ParseTuple(args,"Ohi",&pSrc,&scaleFract,&shift))
844   {
845 
846     GETARGUMENT(pSrc,NPY_INT16,int16_t,int16_t);
847     blockSize = arraySizepSrc ;
848 
849     pDst=PyMem_Malloc(sizeof(q15_t)*blockSize);
850 
851 
852     arm_scale_q15(pSrc_converted,scaleFract,(int8_t)shift,pDst,blockSize);
853  INT16ARRAY1(pDstOBJ,blockSize,pDst);
854 
855     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
856 
857     FREEARGUMENT(pSrc_converted);
858     Py_DECREF(pDstOBJ);
859     return(pythonResult);
860 
861   }
862   return(NULL);
863 }
864 
865 
866 static PyObject *
cmsis_arm_scale_q31(PyObject * obj,PyObject * args)867 cmsis_arm_scale_q31(PyObject *obj, PyObject *args)
868 {
869 
870   PyObject *pSrc=NULL; // input
871   q31_t *pSrc_converted=NULL; // input
872   q31_t scaleFract; // input
873   int32_t shift; // input
874   q31_t *pDst=NULL; // output
875   uint32_t blockSize; // input
876 
877   if (PyArg_ParseTuple(args,"Oii",&pSrc,&scaleFract,&shift))
878   {
879 
880     GETARGUMENT(pSrc,NPY_INT32,int32_t,int32_t);
881     blockSize = arraySizepSrc ;
882 
883     pDst=PyMem_Malloc(sizeof(q31_t)*blockSize);
884 
885 
886     arm_scale_q31(pSrc_converted,scaleFract,(int8_t)shift,pDst,blockSize);
887  INT32ARRAY1(pDstOBJ,blockSize,pDst);
888 
889     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
890 
891     FREEARGUMENT(pSrc_converted);
892     Py_DECREF(pDstOBJ);
893     return(pythonResult);
894 
895   }
896   return(NULL);
897 }
898 
899 
900 static PyObject *
cmsis_arm_abs_q7(PyObject * obj,PyObject * args)901 cmsis_arm_abs_q7(PyObject *obj, PyObject *args)
902 {
903 
904   PyObject *pSrc=NULL; // input
905   q7_t *pSrc_converted=NULL; // input
906   q7_t *pDst=NULL; // output
907   uint32_t blockSize; // input
908 
909   if (PyArg_ParseTuple(args,"O",&pSrc))
910   {
911 
912     GETARGUMENT(pSrc,NPY_BYTE,int8_t,q7_t);
913     blockSize = arraySizepSrc ;
914 
915     pDst=PyMem_Malloc(sizeof(q7_t)*blockSize);
916 
917 
918     arm_abs_q7(pSrc_converted,pDst,blockSize);
919  INT8ARRAY1(pDstOBJ,blockSize,pDst);
920 
921     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
922 
923     FREEARGUMENT(pSrc_converted);
924     Py_DECREF(pDstOBJ);
925     return(pythonResult);
926 
927   }
928   return(NULL);
929 }
930 
931 
932 static PyObject *
cmsis_arm_abs_f32(PyObject * obj,PyObject * args)933 cmsis_arm_abs_f32(PyObject *obj, PyObject *args)
934 {
935 
936   PyObject *pSrc=NULL; // input
937   float32_t *pSrc_converted=NULL; // input
938   float32_t *pDst=NULL; // output
939   uint32_t blockSize; // input
940 
941   if (PyArg_ParseTuple(args,"O",&pSrc))
942   {
943 
944     GETARGUMENT(pSrc,NPY_DOUBLE,double,float32_t);
945     blockSize = arraySizepSrc ;
946 
947     pDst=PyMem_Malloc(sizeof(float32_t)*blockSize);
948 
949 
950     arm_abs_f32(pSrc_converted,pDst,blockSize);
951  FLOATARRAY1(pDstOBJ,blockSize,pDst);
952 
953     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
954 
955     FREEARGUMENT(pSrc_converted);
956     Py_DECREF(pDstOBJ);
957     return(pythonResult);
958 
959   }
960   return(NULL);
961 }
962 
963 static PyObject *
cmsis_arm_abs_f64(PyObject * obj,PyObject * args)964 cmsis_arm_abs_f64(PyObject *obj, PyObject *args)
965 {
966 
967   PyObject *pSrc=NULL; // input
968   float64_t *pSrc_converted=NULL; // input
969   float64_t *pDst=NULL; // output
970   uint32_t blockSize; // input
971 
972   if (PyArg_ParseTuple(args,"O",&pSrc))
973   {
974 
975     GETARGUMENT(pSrc,NPY_DOUBLE,double,float64_t);
976     blockSize = arraySizepSrc ;
977 
978     pDst=PyMem_Malloc(sizeof(float64_t)*blockSize);
979 
980 
981     arm_abs_f64(pSrc_converted,pDst,blockSize);
982  FLOAT64ARRAY1(pDstOBJ,blockSize,pDst);
983 
984     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
985 
986     FREEARGUMENT(pSrc_converted);
987     Py_DECREF(pDstOBJ);
988     return(pythonResult);
989 
990   }
991   return(NULL);
992 }
993 
994 
995 static PyObject *
cmsis_arm_abs_q15(PyObject * obj,PyObject * args)996 cmsis_arm_abs_q15(PyObject *obj, PyObject *args)
997 {
998 
999   PyObject *pSrc=NULL; // input
1000   q15_t *pSrc_converted=NULL; // input
1001   q15_t *pDst=NULL; // output
1002   uint32_t blockSize; // input
1003 
1004   if (PyArg_ParseTuple(args,"O",&pSrc))
1005   {
1006 
1007     GETARGUMENT(pSrc,NPY_INT16,int16_t,int16_t);
1008     blockSize = arraySizepSrc ;
1009 
1010     pDst=PyMem_Malloc(sizeof(q15_t)*blockSize);
1011 
1012 
1013     arm_abs_q15(pSrc_converted,pDst,blockSize);
1014  INT16ARRAY1(pDstOBJ,blockSize,pDst);
1015 
1016     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1017 
1018     FREEARGUMENT(pSrc_converted);
1019     Py_DECREF(pDstOBJ);
1020     return(pythonResult);
1021 
1022   }
1023   return(NULL);
1024 }
1025 
1026 
1027 static PyObject *
cmsis_arm_abs_q31(PyObject * obj,PyObject * args)1028 cmsis_arm_abs_q31(PyObject *obj, PyObject *args)
1029 {
1030 
1031   PyObject *pSrc=NULL; // input
1032   q31_t *pSrc_converted=NULL; // input
1033   q31_t *pDst=NULL; // output
1034   uint32_t blockSize; // input
1035 
1036   if (PyArg_ParseTuple(args,"O",&pSrc))
1037   {
1038 
1039     GETARGUMENT(pSrc,NPY_INT32,int32_t,int32_t);
1040     blockSize = arraySizepSrc ;
1041 
1042     pDst=PyMem_Malloc(sizeof(q31_t)*blockSize);
1043 
1044 
1045     arm_abs_q31(pSrc_converted,pDst,blockSize);
1046  INT32ARRAY1(pDstOBJ,blockSize,pDst);
1047 
1048     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1049 
1050     FREEARGUMENT(pSrc_converted);
1051     Py_DECREF(pDstOBJ);
1052     return(pythonResult);
1053 
1054   }
1055   return(NULL);
1056 }
1057 
1058 
1059 
1060 
1061 
1062 static PyObject *
cmsis_arm_dot_prod_f32(PyObject * obj,PyObject * args)1063 cmsis_arm_dot_prod_f32(PyObject *obj, PyObject *args)
1064 {
1065 
1066   PyObject *pSrcA=NULL; // input
1067   float32_t *pSrcA_converted=NULL; // input
1068   PyObject *pSrcB=NULL; // input
1069   float32_t *pSrcB_converted=NULL; // input
1070   uint32_t blockSize; // input
1071   float32_t result; // output
1072 
1073   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1074   {
1075 
1076     GETARGUMENT(pSrcA,NPY_DOUBLE,double,float32_t);
1077     GETARGUMENT(pSrcB,NPY_DOUBLE,double,float32_t);
1078     blockSize = arraySizepSrcA ;
1079 
1080 
1081 
1082     arm_dot_prod_f32(pSrcA_converted,pSrcB_converted,blockSize,&result);
1083     PyObject* resultOBJ=Py_BuildValue("f",result);
1084 
1085     PyObject *pythonResult = Py_BuildValue("O",resultOBJ);
1086 
1087     FREEARGUMENT(pSrcA_converted);
1088     FREEARGUMENT(pSrcB_converted);
1089     Py_DECREF(resultOBJ);
1090     return(pythonResult);
1091 
1092   }
1093   return(NULL);
1094 }
1095 
1096 static PyObject *
cmsis_arm_dot_prod_f64(PyObject * obj,PyObject * args)1097 cmsis_arm_dot_prod_f64(PyObject *obj, PyObject *args)
1098 {
1099 
1100   PyObject *pSrcA=NULL; // input
1101   float64_t *pSrcA_converted=NULL; // input
1102   PyObject *pSrcB=NULL; // input
1103   float64_t *pSrcB_converted=NULL; // input
1104   uint32_t blockSize; // input
1105   float64_t result; // output
1106 
1107   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1108   {
1109 
1110     GETARGUMENT(pSrcA,NPY_DOUBLE,double,float64_t);
1111     GETARGUMENT(pSrcB,NPY_DOUBLE,double,float64_t);
1112     blockSize = arraySizepSrcA ;
1113 
1114 
1115 
1116     arm_dot_prod_f64(pSrcA_converted,pSrcB_converted,blockSize,&result);
1117     PyObject* resultOBJ=Py_BuildValue("d",result);
1118 
1119     PyObject *pythonResult = Py_BuildValue("O",resultOBJ);
1120 
1121     FREEARGUMENT(pSrcA_converted);
1122     FREEARGUMENT(pSrcB_converted);
1123     Py_DECREF(resultOBJ);
1124     return(pythonResult);
1125 
1126   }
1127   return(NULL);
1128 }
1129 
1130 
1131 static PyObject *
cmsis_arm_dot_prod_q7(PyObject * obj,PyObject * args)1132 cmsis_arm_dot_prod_q7(PyObject *obj, PyObject *args)
1133 {
1134 
1135   PyObject *pSrcA=NULL; // input
1136   q7_t *pSrcA_converted=NULL; // input
1137   PyObject *pSrcB=NULL; // input
1138   q7_t *pSrcB_converted=NULL; // input
1139   uint32_t blockSize; // input
1140   q31_t result; // output
1141 
1142   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1143   {
1144 
1145     GETARGUMENT(pSrcA,NPY_BYTE,int8_t,q7_t);
1146     GETARGUMENT(pSrcB,NPY_BYTE,int8_t,q7_t);
1147     blockSize = arraySizepSrcA ;
1148 
1149 
1150 
1151     arm_dot_prod_q7(pSrcA_converted,pSrcB_converted,blockSize,&result);
1152     PyObject* resultOBJ=Py_BuildValue("i",result);
1153 
1154     PyObject *pythonResult = Py_BuildValue("O",resultOBJ);
1155 
1156     FREEARGUMENT(pSrcA_converted);
1157     FREEARGUMENT(pSrcB_converted);
1158     Py_DECREF(resultOBJ);
1159     return(pythonResult);
1160 
1161   }
1162   return(NULL);
1163 }
1164 
1165 
1166 static PyObject *
cmsis_arm_dot_prod_q15(PyObject * obj,PyObject * args)1167 cmsis_arm_dot_prod_q15(PyObject *obj, PyObject *args)
1168 {
1169 
1170   PyObject *pSrcA=NULL; // input
1171   q15_t *pSrcA_converted=NULL; // input
1172   PyObject *pSrcB=NULL; // input
1173   q15_t *pSrcB_converted=NULL; // input
1174   uint32_t blockSize; // input
1175   q63_t result; // output
1176 
1177   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1178   {
1179 
1180     GETARGUMENT(pSrcA,NPY_INT16,int16_t,int16_t);
1181     GETARGUMENT(pSrcB,NPY_INT16,int16_t,int16_t);
1182     blockSize = arraySizepSrcA ;
1183 
1184 
1185 
1186     arm_dot_prod_q15(pSrcA_converted,pSrcB_converted,blockSize,&result);
1187     PyObject* resultOBJ=Py_BuildValue("L",result);
1188 
1189     PyObject *pythonResult = Py_BuildValue("O",resultOBJ);
1190 
1191     FREEARGUMENT(pSrcA_converted);
1192     FREEARGUMENT(pSrcB_converted);
1193     Py_DECREF(resultOBJ);
1194     return(pythonResult);
1195 
1196   }
1197   return(NULL);
1198 }
1199 
1200 
1201 static PyObject *
cmsis_arm_dot_prod_q31(PyObject * obj,PyObject * args)1202 cmsis_arm_dot_prod_q31(PyObject *obj, PyObject *args)
1203 {
1204 
1205   PyObject *pSrcA=NULL; // input
1206   q31_t *pSrcA_converted=NULL; // input
1207   PyObject *pSrcB=NULL; // input
1208   q31_t *pSrcB_converted=NULL; // input
1209   uint32_t blockSize; // input
1210   q63_t result; // output
1211 
1212   if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1213   {
1214 
1215     GETARGUMENT(pSrcA,NPY_INT32,int32_t,int32_t);
1216     GETARGUMENT(pSrcB,NPY_INT32,int32_t,int32_t);
1217     blockSize = arraySizepSrcA ;
1218 
1219 
1220 
1221     arm_dot_prod_q31(pSrcA_converted,pSrcB_converted,blockSize,&result);
1222     PyObject* resultOBJ=Py_BuildValue("L",result);
1223 
1224     PyObject *pythonResult = Py_BuildValue("O",resultOBJ);
1225 
1226     FREEARGUMENT(pSrcA_converted);
1227     FREEARGUMENT(pSrcB_converted);
1228     Py_DECREF(resultOBJ);
1229     return(pythonResult);
1230 
1231   }
1232   return(NULL);
1233 }
1234 
1235 
1236 static PyObject *
cmsis_arm_shift_q7(PyObject * obj,PyObject * args)1237 cmsis_arm_shift_q7(PyObject *obj, PyObject *args)
1238 {
1239 
1240   PyObject *pSrc=NULL; // input
1241   q7_t *pSrc_converted=NULL; // input
1242   int32_t shiftBits; // input
1243   q7_t *pDst=NULL; // output
1244   uint32_t blockSize; // input
1245 
1246   if (PyArg_ParseTuple(args,"Oi",&pSrc,&shiftBits))
1247   {
1248 
1249     GETARGUMENT(pSrc,NPY_BYTE,int8_t,q7_t);
1250     blockSize = arraySizepSrc ;
1251 
1252     pDst=PyMem_Malloc(sizeof(q7_t)*blockSize);
1253 
1254 
1255     arm_shift_q7(pSrc_converted,(int8_t)shiftBits,pDst,blockSize);
1256  INT8ARRAY1(pDstOBJ,blockSize,pDst);
1257 
1258     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1259 
1260     FREEARGUMENT(pSrc_converted);
1261     Py_DECREF(pDstOBJ);
1262     return(pythonResult);
1263 
1264   }
1265   return(NULL);
1266 }
1267 
1268 
1269 static PyObject *
cmsis_arm_shift_q15(PyObject * obj,PyObject * args)1270 cmsis_arm_shift_q15(PyObject *obj, PyObject *args)
1271 {
1272 
1273   PyObject *pSrc=NULL; // input
1274   q15_t *pSrc_converted=NULL; // input
1275   int32_t shiftBits; // input
1276   q15_t *pDst=NULL; // output
1277   uint32_t blockSize; // input
1278 
1279   if (PyArg_ParseTuple(args,"Oi",&pSrc,&shiftBits))
1280   {
1281 
1282     GETARGUMENT(pSrc,NPY_INT16,int16_t,int16_t);
1283     blockSize = arraySizepSrc ;
1284 
1285     pDst=PyMem_Malloc(sizeof(q15_t)*blockSize);
1286 
1287 
1288     arm_shift_q15(pSrc_converted,(int8_t)shiftBits,pDst,blockSize);
1289  INT16ARRAY1(pDstOBJ,blockSize,pDst);
1290 
1291     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1292 
1293     FREEARGUMENT(pSrc_converted);
1294     Py_DECREF(pDstOBJ);
1295     return(pythonResult);
1296 
1297   }
1298   return(NULL);
1299 }
1300 
1301 
1302 static PyObject *
cmsis_arm_shift_q31(PyObject * obj,PyObject * args)1303 cmsis_arm_shift_q31(PyObject *obj, PyObject *args)
1304 {
1305 
1306   PyObject *pSrc=NULL; // input
1307   q31_t *pSrc_converted=NULL; // input
1308   int32_t shiftBits; // input
1309   q31_t *pDst=NULL; // output
1310   uint32_t blockSize; // input
1311 
1312   if (PyArg_ParseTuple(args,"Oi",&pSrc,&shiftBits))
1313   {
1314 
1315     GETARGUMENT(pSrc,NPY_INT32,int32_t,int32_t);
1316     blockSize = arraySizepSrc ;
1317 
1318     pDst=PyMem_Malloc(sizeof(q31_t)*blockSize);
1319 
1320 
1321     arm_shift_q31(pSrc_converted,(int8_t)shiftBits,pDst,blockSize);
1322  INT32ARRAY1(pDstOBJ,blockSize,pDst);
1323 
1324     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1325 
1326     FREEARGUMENT(pSrc_converted);
1327     Py_DECREF(pDstOBJ);
1328     return(pythonResult);
1329 
1330   }
1331   return(NULL);
1332 }
1333 
1334 static PyObject *
cmsis_arm_clip_f32(PyObject * obj,PyObject * args)1335 cmsis_arm_clip_f32(PyObject *obj, PyObject *args)
1336 {
1337 
1338   PyObject *pSrc=NULL; // input
1339   float32_t *pSrc_converted=NULL; // input
1340   float32_t low,high; // input
1341   float32_t *pDst=NULL; // output
1342   uint32_t blockSize; // input
1343 
1344   if (PyArg_ParseTuple(args,"Off",&pSrc,&low,&high))
1345   {
1346 
1347     GETARGUMENT(pSrc,NPY_DOUBLE,double,float32_t);
1348     blockSize = arraySizepSrc ;
1349 
1350     pDst=PyMem_Malloc(sizeof(float32_t)*blockSize);
1351 
1352 
1353     arm_clip_f32(pSrc_converted,pDst,low,high,blockSize);
1354  FLOATARRAY1(pDstOBJ,blockSize,pDst);
1355 
1356     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1357 
1358     FREEARGUMENT(pSrc_converted);
1359     Py_DECREF(pDstOBJ);
1360     return(pythonResult);
1361 
1362   }
1363   return(NULL);
1364 }
1365 
1366 static PyObject *
cmsis_arm_clip_q31(PyObject * obj,PyObject * args)1367 cmsis_arm_clip_q31(PyObject *obj, PyObject *args)
1368 {
1369 
1370   PyObject *pSrc=NULL; // input
1371   q31_t *pSrc_converted=NULL; // input
1372   q31_t low,high; // input
1373   q31_t *pDst=NULL; // output
1374   uint32_t blockSize; // input
1375 
1376   if (PyArg_ParseTuple(args,"Oii",&pSrc,&low,&high))
1377   {
1378 
1379     GETARGUMENT(pSrc,NPY_INT32,int32_t,int32_t);
1380     blockSize = arraySizepSrc ;
1381 
1382     pDst=PyMem_Malloc(sizeof(q31_t)*blockSize);
1383 
1384 
1385     arm_clip_q31(pSrc_converted,pDst,low,high,blockSize);
1386  INT32ARRAY1(pDstOBJ,blockSize,pDst);
1387 
1388     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1389 
1390     FREEARGUMENT(pSrc_converted);
1391     Py_DECREF(pDstOBJ);
1392     return(pythonResult);
1393 
1394   }
1395   return(NULL);
1396 }
1397 
1398 
1399 static PyObject *
cmsis_arm_clip_q15(PyObject * obj,PyObject * args)1400 cmsis_arm_clip_q15(PyObject *obj, PyObject *args)
1401 {
1402 
1403   PyObject *pSrc=NULL; // input
1404   q15_t *pSrc_converted=NULL; // input
1405   q15_t low,high; // input
1406   q15_t *pDst=NULL; // output
1407   uint32_t blockSize; // input
1408 
1409   if (PyArg_ParseTuple(args,"Ohh",&pSrc,&low,&high))
1410   {
1411 
1412     GETARGUMENT(pSrc,NPY_INT16,int16_t,int16_t);
1413     blockSize = arraySizepSrc ;
1414 
1415     pDst=PyMem_Malloc(sizeof(q15_t)*blockSize);
1416 
1417 
1418     arm_clip_q15(pSrc_converted,pDst,low,high,blockSize);
1419  INT16ARRAY1(pDstOBJ,blockSize,pDst);
1420 
1421     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1422 
1423     FREEARGUMENT(pSrc_converted);
1424     Py_DECREF(pDstOBJ);
1425     return(pythonResult);
1426 
1427   }
1428   return(NULL);
1429 }
1430 
1431 static PyObject *
cmsis_arm_clip_q7(PyObject * obj,PyObject * args)1432 cmsis_arm_clip_q7(PyObject *obj, PyObject *args)
1433 {
1434 
1435   PyObject *pSrc=NULL; // input
1436   q7_t *pSrc_converted=NULL; // input
1437   int32_t low,high; // input
1438   q7_t *pDst=NULL; // output
1439   uint32_t blockSize; // input
1440 
1441   if (PyArg_ParseTuple(args,"Oii",&pSrc,&low,&high))
1442   {
1443 
1444     GETARGUMENT(pSrc,NPY_BYTE,int8_t,q7_t);
1445     blockSize = arraySizepSrc ;
1446 
1447     pDst=PyMem_Malloc(sizeof(q7_t)*blockSize);
1448 
1449 
1450     arm_clip_q7(pSrc_converted,pDst,(q7_t)low,(q7_t)high,blockSize);
1451  INT8ARRAY1(pDstOBJ,blockSize,pDst);
1452 
1453     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1454 
1455     FREEARGUMENT(pSrc_converted);
1456     Py_DECREF(pDstOBJ);
1457     return(pythonResult);
1458 
1459   }
1460   return(NULL);
1461 }
1462 
1463 
1464 static PyObject *
cmsis_arm_offset_f32(PyObject * obj,PyObject * args)1465 cmsis_arm_offset_f32(PyObject *obj, PyObject *args)
1466 {
1467 
1468   PyObject *pSrc=NULL; // input
1469   float32_t *pSrc_converted=NULL; // input
1470   float32_t offset; // input
1471   float32_t *pDst=NULL; // output
1472   uint32_t blockSize; // input
1473 
1474   if (PyArg_ParseTuple(args,"Of",&pSrc,&offset))
1475   {
1476 
1477     GETARGUMENT(pSrc,NPY_DOUBLE,double,float32_t);
1478     blockSize = arraySizepSrc ;
1479 
1480     pDst=PyMem_Malloc(sizeof(float32_t)*blockSize);
1481 
1482 
1483     arm_offset_f32(pSrc_converted,offset,pDst,blockSize);
1484  FLOATARRAY1(pDstOBJ,blockSize,pDst);
1485 
1486     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1487 
1488     FREEARGUMENT(pSrc_converted);
1489     Py_DECREF(pDstOBJ);
1490     return(pythonResult);
1491 
1492   }
1493   return(NULL);
1494 }
1495 
1496 static PyObject *
cmsis_arm_offset_f64(PyObject * obj,PyObject * args)1497 cmsis_arm_offset_f64(PyObject *obj, PyObject *args)
1498 {
1499 
1500   PyObject *pSrc=NULL; // input
1501   float64_t *pSrc_converted=NULL; // input
1502   float64_t offset; // input
1503   float64_t *pDst=NULL; // output
1504   uint32_t blockSize; // input
1505 
1506   if (PyArg_ParseTuple(args,"Od",&pSrc,&offset))
1507   {
1508 
1509     GETARGUMENT(pSrc,NPY_DOUBLE,double,float64_t);
1510     blockSize = arraySizepSrc ;
1511 
1512     pDst=PyMem_Malloc(sizeof(float64_t)*blockSize);
1513 
1514 
1515     arm_offset_f64(pSrc_converted,offset,pDst,blockSize);
1516  FLOAT64ARRAY1(pDstOBJ,blockSize,pDst);
1517 
1518     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1519 
1520     FREEARGUMENT(pSrc_converted);
1521     Py_DECREF(pDstOBJ);
1522     return(pythonResult);
1523 
1524   }
1525   return(NULL);
1526 }
1527 
1528 
1529 static PyObject *
cmsis_arm_offset_q7(PyObject * obj,PyObject * args)1530 cmsis_arm_offset_q7(PyObject *obj, PyObject *args)
1531 {
1532 
1533   PyObject *pSrc=NULL; // input
1534   q7_t *pSrc_converted=NULL; // input
1535   int32_t offset; // input
1536   q7_t *pDst=NULL; // output
1537   uint32_t blockSize; // input
1538 
1539   if (PyArg_ParseTuple(args,"Oi",&pSrc,&offset))
1540   {
1541 
1542     GETARGUMENT(pSrc,NPY_BYTE,int8_t,q7_t);
1543     blockSize = arraySizepSrc ;
1544 
1545     pDst=PyMem_Malloc(sizeof(q7_t)*blockSize);
1546 
1547 
1548     arm_offset_q7(pSrc_converted,(q7_t)offset,pDst,blockSize);
1549  INT8ARRAY1(pDstOBJ,blockSize,pDst);
1550 
1551     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1552 
1553     FREEARGUMENT(pSrc_converted);
1554     Py_DECREF(pDstOBJ);
1555     return(pythonResult);
1556 
1557   }
1558   return(NULL);
1559 }
1560 
1561 
1562 static PyObject *
cmsis_arm_offset_q15(PyObject * obj,PyObject * args)1563 cmsis_arm_offset_q15(PyObject *obj, PyObject *args)
1564 {
1565 
1566   PyObject *pSrc=NULL; // input
1567   q15_t *pSrc_converted=NULL; // input
1568   q15_t offset; // input
1569   q15_t *pDst=NULL; // output
1570   uint32_t blockSize; // input
1571 
1572   if (PyArg_ParseTuple(args,"Oh",&pSrc,&offset))
1573   {
1574 
1575     GETARGUMENT(pSrc,NPY_INT16,int16_t,int16_t);
1576     blockSize = arraySizepSrc ;
1577 
1578     pDst=PyMem_Malloc(sizeof(q15_t)*blockSize);
1579 
1580 
1581     arm_offset_q15(pSrc_converted,offset,pDst,blockSize);
1582  INT16ARRAY1(pDstOBJ,blockSize,pDst);
1583 
1584     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1585 
1586     FREEARGUMENT(pSrc_converted);
1587     Py_DECREF(pDstOBJ);
1588     return(pythonResult);
1589 
1590   }
1591   return(NULL);
1592 }
1593 
1594 
1595 static PyObject *
cmsis_arm_offset_q31(PyObject * obj,PyObject * args)1596 cmsis_arm_offset_q31(PyObject *obj, PyObject *args)
1597 {
1598 
1599   PyObject *pSrc=NULL; // input
1600   q31_t *pSrc_converted=NULL; // input
1601   q31_t offset; // input
1602   q31_t *pDst=NULL; // output
1603   uint32_t blockSize; // input
1604 
1605   if (PyArg_ParseTuple(args,"Oi",&pSrc,&offset))
1606   {
1607 
1608     GETARGUMENT(pSrc,NPY_INT32,int32_t,int32_t);
1609     blockSize = arraySizepSrc ;
1610 
1611     pDst=PyMem_Malloc(sizeof(q31_t)*blockSize);
1612 
1613 
1614     arm_offset_q31(pSrc_converted,offset,pDst,blockSize);
1615  INT32ARRAY1(pDstOBJ,blockSize,pDst);
1616 
1617     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1618 
1619     FREEARGUMENT(pSrc_converted);
1620     Py_DECREF(pDstOBJ);
1621     return(pythonResult);
1622 
1623   }
1624   return(NULL);
1625 }
1626 
1627 
1628 static PyObject *
cmsis_arm_negate_f32(PyObject * obj,PyObject * args)1629 cmsis_arm_negate_f32(PyObject *obj, PyObject *args)
1630 {
1631 
1632   PyObject *pSrc=NULL; // input
1633   float32_t *pSrc_converted=NULL; // input
1634   float32_t *pDst=NULL; // output
1635   uint32_t blockSize; // input
1636 
1637   if (PyArg_ParseTuple(args,"O",&pSrc))
1638   {
1639 
1640     GETARGUMENT(pSrc,NPY_DOUBLE,double,float32_t);
1641     blockSize = arraySizepSrc ;
1642 
1643     pDst=PyMem_Malloc(sizeof(float32_t)*blockSize);
1644 
1645 
1646     arm_negate_f32(pSrc_converted,pDst,blockSize);
1647  FLOATARRAY1(pDstOBJ,blockSize,pDst);
1648 
1649     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1650 
1651     FREEARGUMENT(pSrc_converted);
1652     Py_DECREF(pDstOBJ);
1653     return(pythonResult);
1654 
1655   }
1656   return(NULL);
1657 }
1658 
1659 static PyObject *
cmsis_arm_negate_f64(PyObject * obj,PyObject * args)1660 cmsis_arm_negate_f64(PyObject *obj, PyObject *args)
1661 {
1662 
1663   PyObject *pSrc=NULL; // input
1664   float64_t *pSrc_converted=NULL; // input
1665   float64_t *pDst=NULL; // output
1666   uint32_t blockSize; // input
1667 
1668   if (PyArg_ParseTuple(args,"O",&pSrc))
1669   {
1670 
1671     GETARGUMENT(pSrc,NPY_DOUBLE,double,float64_t);
1672     blockSize = arraySizepSrc ;
1673 
1674     pDst=PyMem_Malloc(sizeof(float64_t)*blockSize);
1675 
1676 
1677     arm_negate_f64(pSrc_converted,pDst,blockSize);
1678  FLOAT64ARRAY1(pDstOBJ,blockSize,pDst);
1679 
1680     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1681 
1682     FREEARGUMENT(pSrc_converted);
1683     Py_DECREF(pDstOBJ);
1684     return(pythonResult);
1685 
1686   }
1687   return(NULL);
1688 }
1689 
1690 static PyObject *
cmsis_arm_negate_q7(PyObject * obj,PyObject * args)1691 cmsis_arm_negate_q7(PyObject *obj, PyObject *args)
1692 {
1693 
1694   PyObject *pSrc=NULL; // input
1695   q7_t *pSrc_converted=NULL; // input
1696   q7_t *pDst=NULL; // output
1697   uint32_t blockSize; // input
1698 
1699   if (PyArg_ParseTuple(args,"O",&pSrc))
1700   {
1701 
1702     GETARGUMENT(pSrc,NPY_BYTE,int8_t,q7_t);
1703     blockSize = arraySizepSrc ;
1704 
1705     pDst=PyMem_Malloc(sizeof(q7_t)*blockSize);
1706 
1707 
1708     arm_negate_q7(pSrc_converted,pDst,blockSize);
1709  INT8ARRAY1(pDstOBJ,blockSize,pDst);
1710 
1711     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1712 
1713     FREEARGUMENT(pSrc_converted);
1714     Py_DECREF(pDstOBJ);
1715     return(pythonResult);
1716 
1717   }
1718   return(NULL);
1719 }
1720 
1721 
1722 static PyObject *
cmsis_arm_negate_q15(PyObject * obj,PyObject * args)1723 cmsis_arm_negate_q15(PyObject *obj, PyObject *args)
1724 {
1725 
1726   PyObject *pSrc=NULL; // input
1727   q15_t *pSrc_converted=NULL; // input
1728   q15_t *pDst=NULL; // output
1729   uint32_t blockSize; // input
1730 
1731   if (PyArg_ParseTuple(args,"O",&pSrc))
1732   {
1733 
1734     GETARGUMENT(pSrc,NPY_INT16,int16_t,int16_t);
1735     blockSize = arraySizepSrc ;
1736 
1737     pDst=PyMem_Malloc(sizeof(q15_t)*blockSize);
1738 
1739 
1740     arm_negate_q15(pSrc_converted,pDst,blockSize);
1741  INT16ARRAY1(pDstOBJ,blockSize,pDst);
1742 
1743     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1744 
1745     FREEARGUMENT(pSrc_converted);
1746     Py_DECREF(pDstOBJ);
1747     return(pythonResult);
1748 
1749   }
1750   return(NULL);
1751 }
1752 
1753 
1754 static PyObject *
cmsis_arm_negate_q31(PyObject * obj,PyObject * args)1755 cmsis_arm_negate_q31(PyObject *obj, PyObject *args)
1756 {
1757 
1758   PyObject *pSrc=NULL; // input
1759   q31_t *pSrc_converted=NULL; // input
1760   q31_t *pDst=NULL; // output
1761   uint32_t blockSize; // input
1762 
1763   if (PyArg_ParseTuple(args,"O",&pSrc))
1764   {
1765 
1766     GETARGUMENT(pSrc,NPY_INT32,int32_t,int32_t);
1767     blockSize = arraySizepSrc ;
1768 
1769     pDst=PyMem_Malloc(sizeof(q31_t)*blockSize);
1770 
1771 
1772     arm_negate_q31(pSrc_converted,pDst,blockSize);
1773  INT32ARRAY1(pDstOBJ,blockSize,pDst);
1774 
1775     PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1776 
1777     FREEARGUMENT(pSrc_converted);
1778     Py_DECREF(pDstOBJ);
1779     return(pythonResult);
1780 
1781   }
1782   return(NULL);
1783 }
1784 
1785 
1786 
1787 static PyObject *
cmsis_ssat(PyObject * obj,PyObject * args)1788 cmsis_ssat(PyObject *obj, PyObject *args)
1789 {
1790 
1791   int32_t val; // input
1792   uint32_t sat;
1793 
1794   if (PyArg_ParseTuple(args,"iI",&val,&sat))
1795   {
1796 
1797     int32_t result = __SSAT(val,sat);
1798     PyObject* theReturnOBJ=Py_BuildValue("i",result);
1799 
1800     return(theReturnOBJ);
1801 
1802   }
1803   return(NULL);
1804 }
1805 
1806 static PyObject *
cmsis_usat(PyObject * obj,PyObject * args)1807 cmsis_usat(PyObject *obj, PyObject *args)
1808 {
1809 
1810   int32_t val; // input
1811   uint32_t sat;
1812   q15_t pOut,shift; // output
1813 
1814   if (PyArg_ParseTuple(args,"iI",&val,&sat))
1815   {
1816 
1817     uint32_t result = __USAT(val,sat);
1818     PyObject* theReturnOBJ=Py_BuildValue("I",result);
1819 
1820     return(theReturnOBJ);
1821 
1822   }
1823   return(NULL);
1824 }
1825 
1826 static PyObject *
cmsis_clz(PyObject * obj,PyObject * args)1827 cmsis_clz(PyObject *obj, PyObject *args)
1828 {
1829 
1830   uint32_t val;
1831 
1832   if (PyArg_ParseTuple(args,"I",&val))
1833   {
1834 
1835     uint8_t result = __CLZ(val);
1836     PyObject* theReturnOBJ=Py_BuildValue("B",result);
1837 
1838     return(theReturnOBJ);
1839 
1840   }
1841   return(NULL);
1842 }
1843 
1844 static PyMethodDef CMSISDSPMethods[] = {
1845 
1846 {"arm_recip_q31",  cmsis_arm_recip_q31, METH_VARARGS,""},
1847 {"arm_recip_q15",  cmsis_arm_recip_q15, METH_VARARGS,""},
1848 
1849 
1850 
1851 
1852 {"arm_mult_q7",  cmsis_arm_mult_q7, METH_VARARGS,""},
1853 {"arm_mult_q15",  cmsis_arm_mult_q15, METH_VARARGS,""},
1854 {"arm_mult_q31",  cmsis_arm_mult_q31, METH_VARARGS,""},
1855 {"arm_mult_f32",  cmsis_arm_mult_f32, METH_VARARGS,""},
1856 {"arm_mult_f64",  cmsis_arm_mult_f64, METH_VARARGS,""},
1857 
1858 
1859 {"arm_add_f32",  cmsis_arm_add_f32, METH_VARARGS,""},
1860 {"arm_add_f64",  cmsis_arm_add_f64, METH_VARARGS,""},
1861 {"arm_add_q7",  cmsis_arm_add_q7, METH_VARARGS,""},
1862 {"arm_add_q15",  cmsis_arm_add_q15, METH_VARARGS,""},
1863 {"arm_add_q31",  cmsis_arm_add_q31, METH_VARARGS,""},
1864 {"arm_sub_f32",  cmsis_arm_sub_f32, METH_VARARGS,""},
1865 {"arm_sub_f64",  cmsis_arm_sub_f64, METH_VARARGS,""},
1866 
1867 {"arm_sub_q7",  cmsis_arm_sub_q7, METH_VARARGS,""},
1868 {"arm_sub_q15",  cmsis_arm_sub_q15, METH_VARARGS,""},
1869 {"arm_sub_q31",  cmsis_arm_sub_q31, METH_VARARGS,""},
1870 {"arm_scale_f32",  cmsis_arm_scale_f32, METH_VARARGS,""},
1871 {"arm_scale_f64",  cmsis_arm_scale_f64, METH_VARARGS,""},
1872 {"arm_scale_q7",  cmsis_arm_scale_q7, METH_VARARGS,""},
1873 {"arm_scale_q15",  cmsis_arm_scale_q15, METH_VARARGS,""},
1874 {"arm_scale_q31",  cmsis_arm_scale_q31, METH_VARARGS,""},
1875 {"arm_abs_q7",  cmsis_arm_abs_q7, METH_VARARGS,""},
1876 {"arm_abs_f32",  cmsis_arm_abs_f32, METH_VARARGS,""},
1877 {"arm_abs_f64",  cmsis_arm_abs_f64, METH_VARARGS,""},
1878 {"arm_abs_q15",  cmsis_arm_abs_q15, METH_VARARGS,""},
1879 {"arm_abs_q31",  cmsis_arm_abs_q31, METH_VARARGS,""},
1880 {"arm_dot_prod_f32",  cmsis_arm_dot_prod_f32, METH_VARARGS,""},
1881 {"arm_dot_prod_f64",  cmsis_arm_dot_prod_f64, METH_VARARGS,""},
1882 
1883 {"arm_dot_prod_q7",  cmsis_arm_dot_prod_q7, METH_VARARGS,""},
1884 {"arm_dot_prod_q15",  cmsis_arm_dot_prod_q15, METH_VARARGS,""},
1885 {"arm_dot_prod_q31",  cmsis_arm_dot_prod_q31, METH_VARARGS,""},
1886 {"arm_shift_q7",  cmsis_arm_shift_q7, METH_VARARGS,""},
1887 {"arm_shift_q15",  cmsis_arm_shift_q15, METH_VARARGS,""},
1888 {"arm_shift_q31",  cmsis_arm_shift_q31, METH_VARARGS,""},
1889 {"arm_clip_f32",  cmsis_arm_clip_f32, METH_VARARGS,""},
1890 {"arm_clip_q31",  cmsis_arm_clip_q31, METH_VARARGS,""},
1891 {"arm_clip_q15",  cmsis_arm_clip_q15, METH_VARARGS,""},
1892 {"arm_clip_q7",  cmsis_arm_clip_q7, METH_VARARGS,""},
1893 {"arm_offset_f32",  cmsis_arm_offset_f32, METH_VARARGS,""},
1894 {"arm_offset_f64",  cmsis_arm_offset_f64, METH_VARARGS,""},
1895 
1896 {"arm_offset_q7",  cmsis_arm_offset_q7, METH_VARARGS,""},
1897 {"arm_offset_q15",  cmsis_arm_offset_q15, METH_VARARGS,""},
1898 {"arm_offset_q31",  cmsis_arm_offset_q31, METH_VARARGS,""},
1899 {"arm_negate_f32",  cmsis_arm_negate_f32, METH_VARARGS,""},
1900 {"arm_negate_f64",  cmsis_arm_negate_f64, METH_VARARGS,""},
1901 {"arm_negate_q7",  cmsis_arm_negate_q7, METH_VARARGS,""},
1902 {"arm_negate_q15",  cmsis_arm_negate_q15, METH_VARARGS,""},
1903 {"arm_negate_q31",  cmsis_arm_negate_q31, METH_VARARGS,""},
1904 
1905 
1906 
1907 
1908 
1909 
1910 {"arm_and_u32",  cmsis_arm_and_u32, METH_VARARGS,""},
1911 {"arm_and_u16",  cmsis_arm_and_u16, METH_VARARGS,""},
1912 {"arm_and_u8" ,  cmsis_arm_and_u8, METH_VARARGS,""},
1913 
1914 {"arm_or_u32",  cmsis_arm_or_u32, METH_VARARGS,""},
1915 {"arm_or_u16",  cmsis_arm_or_u16, METH_VARARGS,""},
1916 {"arm_or_u8" ,  cmsis_arm_or_u8, METH_VARARGS,""},
1917 
1918 {"arm_xor_u32",  cmsis_arm_xor_u32, METH_VARARGS,""},
1919 {"arm_xor_u16",  cmsis_arm_xor_u16, METH_VARARGS,""},
1920 {"arm_xor_u8" ,  cmsis_arm_xor_u8, METH_VARARGS,""},
1921 
1922 {"arm_not_u32",  cmsis_arm_not_u32, METH_VARARGS,""},
1923 {"arm_not_u16",  cmsis_arm_not_u16, METH_VARARGS,""},
1924 {"arm_not_u8" ,  cmsis_arm_not_u8, METH_VARARGS,""},
1925 
1926 
1927     {"ssat",  cmsis_ssat, METH_VARARGS,""},
1928     {"usat",  cmsis_usat, METH_VARARGS,""},
1929     {"clz",  cmsis_clz, METH_VARARGS,""},
1930     {"error_out", (PyCFunction)error_out, METH_NOARGS, NULL},
1931     {NULL, NULL, 0, NULL}        /* Sentinel */
1932 };
1933 
1934 #ifdef IS_PY3K
cmsisdsp_traverse(PyObject * m,visitproc visit,void * arg)1935 static int cmsisdsp_traverse(PyObject *m, visitproc visit, void *arg) {
1936     Py_VISIT(GETSTATE(m)->error);
1937     return 0;
1938 }
1939 
cmsisdsp_clear(PyObject * m)1940 static int cmsisdsp_clear(PyObject *m) {
1941     Py_CLEAR(GETSTATE(m)->error);
1942     return 0;
1943 }
1944 
1945 
1946 static struct PyModuleDef moduledef = {
1947         PyModuleDef_HEAD_INIT,
1948         MODNAME,
1949         NULL,
1950         sizeof(struct module_state),
1951         CMSISDSPMethods,
1952         NULL,
1953         cmsisdsp_traverse,
1954         cmsisdsp_clear,
1955         NULL
1956 };
1957 
1958 #define INITERROR return NULL
1959 
1960 PyMODINIT_FUNC
CAT(PyInit_,MODINITNAME)1961 CAT(PyInit_,MODINITNAME)(void)
1962 
1963 
1964 #else
1965 #define INITERROR return
1966 
1967 void CAT(init,MODINITNAME)(void)
1968 #endif
1969 {
1970     import_array();
1971 
1972   #ifdef IS_PY3K
1973     PyObject *module = PyModule_Create(&moduledef);
1974   #else
1975     PyObject *module = Py_InitModule(MODNAME, CMSISDSPMethods);
1976   #endif
1977 
1978   if (module == NULL)
1979       INITERROR;
1980   struct module_state *st = GETSTATE(module);
1981 
1982   st->error = PyErr_NewException(MODNAME".Error", NULL, NULL);
1983   if (st->error == NULL) {
1984       Py_DECREF(module);
1985       INITERROR;
1986   }
1987 
1988 
1989   typeRegistration(module);
1990 
1991   #ifdef IS_PY3K
1992     return module;
1993   #endif
1994 }