34 #define ELEMENT_COUNT(x) c7x::element_count_of<x>::value
58 size_t remNumBlocks = 0;
61 typedef typename c7x::make_full_vector<T>::type vec;
68 __SE_TEMPLATE_v1 se0Params = __gen_SE_TEMPLATE_v1();
69 __SA_TEMPLATE_v1 sa0Params = __gen_SA_TEMPLATE_v1();
79 numBlocks = length / c7x::element_count_of<vec>::value;
80 remNumBlocks = length % c7x::element_count_of<vec>::value;
92 vec InvPI, HalfPI, One, MAX, Zero, s1, s2, s3, s4, C1, C2;
94 InvPI = (vec) 0.318309886183791;
95 HalfPI = (vec) 1.5707963268;
97 MAX = (vec) 1048576.0;
100 s1 = (vec) -1.666665668e-1;
101 s2 = (vec) 8.333025139e-3;
102 s3 = (vec) -1.980741872e-4;
103 s4 = (vec) 2.601903036e-6;
105 C2 = (vec) 9.67653589793e-4;
108 for (
size_t i = 0; i < numBlocks; i++) {
109 vec inVec = c7x::strm_eng<0, vec>::get_adv();
115 vec Sign, X, Y, Z, F, G, R;
117 vec_type int_one = (vec_type) 1;
120 vec negativeOne = (vec) -1;
127 Y = __abs(inVec) + HalfPI;
128 __vpred cmp_gt = __cmp_lt_pred((vec) MAX, Y);
129 Y = __select(cmp_gt, HalfPI, Y);
134 N = __float_to_int(X);
135 Z = c7x::convert<vec>(N);
144 vec_type andN = N & int_one;
145 vec convert_andN = c7x::convert<vec>(andN);
146 __vpred cmp_mod = __cmp_le_pred(convert_andN, Zero);
147 vec Sign_T = __select(cmp_mod, Sign, negativeOne);
149 F = (Y - (Z * C1)) - (Z * C2);
156 __vpred cmp_F = __cmp_lt_pred(F, Zero);
157 R = __select(cmp_F, R, negativeR);
161 __vpred cmp_RMin = __cmp_lt_pred(R, Zero);
163 vec outputRMin = R * Sign_T;
164 R = ((((((s4 * G) + s3) * G) + s2) * G) + s1) * G;
165 vec outVec = ((F + (F * R)) * Sign_T);
167 outVec = __select(cmp_RMin, outVec, outputRMin);
171 __vpred tmp = c7x::strm_agen<0, vec>::get_vpred();
172 vec *addr = c7x::strm_agen<0, vec>::get_adv(pDst);
173 __vstore_pred(tmp, addr, outVec);
template MATHLIB_STATUS MATHLIB_cos< float >(size_t length, float *pSrc, float *pDst)
MATHLIB_STATUS MATHLIB_cos_sp(size_t length, float *pSrc, float *pDst)
This function is the C interface for MATHLIB_cos. Function accepts float pointers.
MATHLIB_STATUS MATHLIB_cos(size_t length, T *pSrc, T *pDst)
Performs the elementwise cosition of an input vector. Function can be overloaded with float pointers,...
static void MATHLIB_SE0SA0Close()
This method performs SE0 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.