MATHLIB User Guide
MATHLIB_utility.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the
14  * distribution.
15  *
16  * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  ******************************************************************************/
33 
34 #ifndef MATHLIB_UTILITY_H_
35 #define MATHLIB_UTILITY_H_ 1
36 
37 /******************************************************************************/
38 /* */
39 /* Includes */
40 /* */
41 /******************************************************************************/
42 
43 #include "MATHLIB_debugPrint.h"
44 #include "MATHLIB_types.h"
45 #include "c7x_scalable.h"
46 #include <limits>
47 
59 /******************************************************************************/
60 /* */
61 /* MATHLIB_SESA1DSequential_init */
62 /* */
63 /******************************************************************************/
64 
65 template <typename T>
66 static inline void MATHLIB_SE0SA01DSequentialInit(__SE_TEMPLATE_v1 *se0Params,
67  __SA_TEMPLATE_v1 *sa0Params,
68  size_t length,
69  T *pSrc,
70  T *pDst)
71 {
72 
73  // SE and SA params that vary by precision type
74  __SE_ELETYPE SE_ELETYPE;
75  __SE_VECLEN SE_VECLEN;
76  __SA_VECLEN SA_VECLEN;
77 
78  // derive c7x vector type from template typename
79  typedef typename c7x::make_full_vector<T>::type vec;
80 
81  // assign SE and SA params based on vector type
82  SE_VECLEN = c7x::se_veclen<vec>::value;
83  SA_VECLEN = c7x::sa_veclen<vec>::value;
84  SE_ELETYPE = c7x::se_eletype<vec>::value;
85 
86  // configure SE0 to fetch the input
87  se0Params->ELETYPE = SE_ELETYPE;
88  se0Params->VECLEN = SE_VECLEN;
89  se0Params->DIMFMT = __SE_DIMFMT_1D;
90  se0Params->ICNT0 = length;
91 
92  // configure SA0 to store output
93  sa0Params->VECLEN = SA_VECLEN;
94  sa0Params->DIMFMT = __SA_DIMFMT_1D;
95  sa0Params->ICNT0 = length;
96 
97  return;
98 }
99 
100 /******************************************************************************/
101 /* */
102 /* MATHLIB_SE0SA0Open */
103 /* */
104 /******************************************************************************/
105 
116 template <typename T>
117 static inline void MATHLIB_SE0SA0Open(__SE_TEMPLATE_v1 *se0Params, __SA_TEMPLATE_v1 *sa0Params, T *pSrc)
118 {
119 
120  __SE0_OPEN(pSrc, *se0Params);
121  __SA0_OPEN(*sa0Params);
122 
123  return;
124 }
125 
126 /******************************************************************************/
127 /* */
128 /* MATHLIB_SE0SE1SA0Open */
129 /* */
130 /******************************************************************************/
131 
143 template <typename T>
144 static inline void MATHLIB_SE0SE1SA0Open(__SE_TEMPLATE_v1 *se0Params, __SA_TEMPLATE_v1 *sa0Params, T *pSrc0, T *pSrc1)
145 {
146 
147  __SE0_OPEN(pSrc0, *se0Params);
148  __SE1_OPEN(pSrc1, *se0Params);
149  __SA0_OPEN(*sa0Params);
150 
151  return;
152 }
153 
154 /******************************************************************************/
155 /* */
156 /* MATHLIB_SE0SA0Close */
157 /* */
158 /******************************************************************************/
159 
166 static inline void MATHLIB_SE0SA0Close()
167 {
168 
169  __SE0_CLOSE();
170  __SA0_CLOSE();
171 
172  return;
173 }
174 
175 /******************************************************************************/
176 /* */
177 /* MATHLIB_SE0SE1SA0Close */
178 /* */
179 /******************************************************************************/
180 
187 static inline void MATHLIB_SE0SE1SA0Close()
188 {
189 
190  __SE0_CLOSE();
191  __SE1_CLOSE();
192  __SA0_CLOSE();
193 
194  return;
195 }
196 
197 /******************************************************************************/
198 /* */
199 /* MATHLIB_checkParams */
200 /* */
201 /******************************************************************************/
202 
214 template <typename T> static inline MATHLIB_STATUS MATHLIB_checkParams(size_t length, T *pSrc, T *pDst)
215 {
217 
218  if ((pSrc == NULL) || (pDst == NULL)) {
219  status = MATHLIB_ERR_NULL_POINTER;
220  }
221  else if (length == 0) {
223  }
224  else {
225  status = MATHLIB_SUCCESS;
226  }
227 
228  return status;
229 }
230 template <typename T> static inline MATHLIB_STATUS MATHLIB_checkParams(size_t length, T *pSrc0, T *pSrc1, T *pDst)
231 {
233 
234  if ((pSrc0 == NULL) || (pSrc1 == NULL) || (pDst == NULL)) {
235  status = MATHLIB_ERR_NULL_POINTER;
236  }
237  else if (length == 0) {
239  }
240  else {
241  status = MATHLIB_SUCCESS;
242  }
243 
244  return status;
245 }
246 
247 
248 
249 /* Inline division (DP) */
250 static inline double cmn_DIVDP(double a, double b) {
251  double TWO = 2.0f;
252  double X;
253  X = __recip(b);
254  X = X*(TWO - (b*X));
255  X = X*(TWO - (b*X));
256  X = X*(TWO - (b*X));
257  X = a * X;
258  return X;
259 }
260 
261 /* Inline division (SP) */
262 static inline float cmn_DIVSP(float a, float b) {
263  float TWO = 2.0f;
264  float X;
265  X = __recip(b);
266  X = X*(TWO - (b*X));
267  X = X*(TWO - (b*X));
268  X = a * X;
269  return X;
270 }
271 
272 
273 
274 
277 #endif // MATHLIB_UTILITY_H_
static float cmn_DIVSP(float a, float b)
static double cmn_DIVDP(double a, double b)
static void MATHLIB_SE0SE1SA0Open(__SE_TEMPLATE_v1 *se0Params, __SA_TEMPLATE_v1 *sa0Params, T *pSrc0, T *pSrc1)
This method performs SE0, SE1, and SA0 open.
static void MATHLIB_SE0SA0Close()
This method performs SE0 and SA0 close.
static void MATHLIB_SE0SE1SA0Close()
This method performs SE0, SE1, and SA0 close.
static void MATHLIB_SE0SA01DSequentialInit(__SE_TEMPLATE_v1 *se0Params, __SA_TEMPLATE_v1 *sa0Params, size_t length, T *pSrc, T *pDst)
static MATHLIB_STATUS MATHLIB_checkParams(size_t length, T *pSrc, T *pDst)
This method performs parameter checks for MATHLIB function.
static void MATHLIB_SE0SA0Open(__SE_TEMPLATE_v1 *se0Params, __SA_TEMPLATE_v1 *sa0Params, T *pSrc)
This method performs SE0 and SA0 open.
MATHLIB_STATUS_NAME
The enumeration of all status codes.
@ MATHLIB_ERR_NULL_POINTER
@ MATHLIB_ERR_INVALID_DIMENSION
@ MATHLIB_ERR_FAILURE
@ MATHLIB_SUCCESS