29 #include "../../../common/c71/FFTLIB_debug.h"
30 #include "../../FFTLIB_ifft1d_i32fc_c32fc_o32fc/FFTLIB_ifft1d_i32fc_c32fc_o32fc.h"
31 #include "../FFTLIB_ifft1d_i32fc_c32fc_o32f.h"
33 #define SE_PARAM_BASE (0x0000)
34 #define SE0_PARAM_OFFSET (SE_PARAM_BASE)
35 #define SE1_PARAM_OFFSET (SE0_PARAM_OFFSET + SE_PARAM_SIZE)
36 #define SE1_PARAM_OFFSET_LAST (SE1_PARAM_OFFSET + SE_PARAM_SIZE)
37 #define SA0_PARAM_OFFSET (SE1_PARAM_OFFSET_LAST + SE_PARAM_SIZE)
38 #define SA1_PARAM_OFFSET (SA0_PARAM_OFFSET + SE_PARAM_SIZE)
40 typedef typename c7x::cfloat_vec
CV;
41 typedef typename c7x::float_vec
V;
67 __SE_TEMPLATE_v1 se0_param = __gen_SE_TEMPLATE_v1 ();
68 __SA_TEMPLATE_v1 sa0_param = __gen_SA_TEMPLATE_v1 ();
72 numPoints = bufParamsX->
dim_x;
74 bufParamsX_FFT.
dim_x = numPoints;
78 &bufParamsX_FFT, (
FFTLIB_F32 *) pY, &bufParamsX_FFT,
79 &((uint8_t *) pBlock)[5 * SE_PARAM_SIZE]);
81 uint32_t elementCount = c7x::element_count_of<CV>::value;
82 uint32_t SEBlocks = (numPoints >> 1) / elementCount;
83 uint32_t offset = numPoints >> 1;
85 se0_param.ICNT0 = elementCount;
87 se0_param.DIM1 = offset;
88 se0_param.ICNT2 = SEBlocks;
89 se0_param.DIM2 = elementCount;
91 se0_param.ELETYPE = __SE_ELETYPE_32BIT_CMPLX_SWAP;
92 se0_param.VECLEN = c7x::se_veclen<CV>::value;
93 se0_param.DIMFMT = __SE_DIMFMT_3D;
97 sa0_param.ICNT0 = numPoints >> 1;
98 sa0_param.VECLEN = c7x::sa_veclen<CV>::value;
99 sa0_param.DIMFMT = __SA_DIMFMT_1D;
125 numPoints = bufParamsX->
dim_x;
126 bufParamsX_FFT.
dim_x = numPoints;
131 __SE_TEMPLATE_v1 se0Params = __gen_SE_TEMPLATE_v1 ();
133 __SA_TEMPLATE_v1 sa0Params = __gen_SA_TEMPLATE_v1 ();
141 __SE0_OPEN (&(pX[0]), se0Params);
142 __SE1_OPEN (&(pSf[0]), se0Params);
143 __SA0_OPEN (sa0Params);
155 uint32_t elementCount = c7x::element_count_of<CV>::value;
157 #pragma MUST_ITERATE(8, , 8)
159 for (i = 0; i < (numPoints >> 1) / (elementCount); i++) {
160 var0 = c7x::strm_eng<0, CV>::get_adv ();
161 var1 = c7x::strm_eng<0, CV>::get_adv ();
163 sFA = c7x::strm_eng<1, CV>::get_adv ();
164 sFB = c7x::strm_eng<1, CV>::get_adv ();
166 temp0 = (__complex_multiply (var0, c7x::as_cfloat_vec (sFA)));
167 temp1 = (__complex_multiply (var1, c7x::as_cfloat_vec (sFB)));
169 regStore0 = temp0 + temp1;
170 tmp = c7x::strm_agen<0, CV>::get_vpred ();
171 addr = c7x::strm_agen<0, CV>::get_adv (&pXFFT[0]);
172 __vstore_pred (tmp, addr, regStore0);
186 &bufParamsX_FFT, (
FFTLIB_F32 *) pY, &bufParamsX_FFT,
187 &((uint8_t *) pBlock)[5 * SE_PARAM_SIZE]);
192 #if (!defined(FFTLIB_REMOVE_CHECK_PARAMS) && \
193 !defined(FFTLIB_FFT1D_I32FC_C32FC_O32FC_REMOVE_CHECK_PARAMS)) || \
194 (defined(FFTLIB_CHECK_PARAMS)) || \
195 (defined(FFTLIB_FFT1D_I32FC_C32FC_O32FC_CHECK_PARAMS))
FFTLIB_STATUS FFTLIB_ifft1d_i32fc_c32fc_o32f_init(FFTLIB_F32 *pX, FFTLIB_bufParams1D_t *bufParamsX, FFTLIB_F32 *pW, FFTLIB_bufParams1D_t *bufParamsW, FFTLIB_F32 *pXFFT, FFTLIB_bufParams1D_t *bufParamsXFFT, FFTLIB_F32 *pSf, FFTLIB_bufParams1D_t *bufParamsSf, FFTLIB_F32 *pY, FFTLIB_bufParams1D_t *bufParamsY, void *pBlock)
This function should be called before the FFTLIB_ifft1d_i32fc_c32fc_o32f_kernel function is called....
FFTLIB_STATUS FFTLIB_ifft1d_i32fc_c32fc_o32f_kernel(FFTLIB_F32 *restrict pX, FFTLIB_bufParams1D_t *bufParamsX, FFTLIB_F32 *restrict pW, FFTLIB_bufParams1D_t *bufParamsW, FFTLIB_F32 *restrict pXFFT, FFTLIB_bufParams1D_t *bufParamsXFFT, FFTLIB_F32 *restrict pSf, FFTLIB_bufParams1D_t *bufParamsSf, FFTLIB_F32 *restrict pY, FFTLIB_bufParams1D_t *bufParamsY, void *pBlock)
This function is the main kernel compute function.
FFTLIB_STATUS FFTLIB_ifft1d_i32fc_c32fc_o32f_checkParams(FFTLIB_F32 *pX, FFTLIB_bufParams1D_t *bufParamsX, FFTLIB_F32 *pW, FFTLIB_bufParams1D_t *bufParamsW, FFTLIB_F32 *pY, FFTLIB_bufParams1D_t *bufParamsY, void *pBlock)
This function checks the validity of the parameters passed to FFTLIB_ifft1d_i32fc_c32fc_o32f_init and...
FFTLIB_STATUS_NAME
The enumeration of all status codes.
float FFTLIB_F32
Single precision floating point.
FFTLIB_STATUS FFTLIB_ifft1d_i32fc_c32fc_o32fc_init(FFTLIB_F32 *pX, FFTLIB_bufParams1D_t *bufParamsX, FFTLIB_F32 *pW, FFTLIB_bufParams1D_t *bufParamsW, FFTLIB_F32 *pY, FFTLIB_bufParams1D_t *bufParamsY, void *pBlock)
This function should be called before the FFTLIB_ifft1d_i32fc_c32fc_o32fc_kernel function is called....
FFTLIB_STATUS FFTLIB_ifft1d_i32fc_c32fc_o32fc_kernel(FFTLIB_F32 *pX, FFTLIB_bufParams1D_t *bufParamsX, FFTLIB_F32 *pW, FFTLIB_bufParams1D_t *bufParamsW, FFTLIB_F32 *pY, FFTLIB_bufParams1D_t *bufParamsY, void *pBlock)
This function is the main kernel compute function.
A structure for a 1 dimensional buffer descriptor.
uint32_t dim_x
Width of buffer in X dimension in elements.