Texas Instruments TMS320C64X User Manual
Page 136
DSP_fft16x16t
4-108
# define DIG_REV(i, m, j) ((j) = (_shfl(_rotl(_bitr(_deal(i)), 16)) >> (m)))
#else
# define DIG_REV(i, m, j) \
do { \
unsigned _ = (i); \
_ = ((_ & 0x33333333) << 2) | ((_ & ~0x33333333) >> 2); \
_ = ((_ & 0x0F0F0F0F) << 4) | ((_ & ~0x0F0F0F0F) >> 4); \
_ = ((_ & 0x00FF00FF) << 8) | ((_ & ~0x00FF00FF) >> 8); \
_ = ((_ & 0x0000FFFF) << 16) | ((_ & ~0x0000FFFF) >> 16); \
(j) = _ >> (m); \
} while (0)
#endif
void DSP_fft16x16t_cn(const short *restrict ptr_w, int npoints, short * ptr_x,
short * ptr_y)
{
int i, j, l1, l2, h2, predj, tw_offset, stride, fft_jmp;
short xt0_0, yt0_0, xt1_0, yt1_0, xt2_0, yt2_0;
short xt0_1, yt0_1, xt1_1, yt1_1, xt2_1, yt2_1;
short xh0_0, xh1_0, xh20_0, xh21_0, xl0_0, xl1_0, xl20_0, xl21_0;
short xh0_1, xh1_1, xh20_1, xh21_1, xl0_1, xl1_1, xl20_1, xl21_1;
short x_0, x_1, x_2, x_3, x_l1_0, x_l1_1, x_l1_2, x_l1_3, x_l2_0, x_l2_1;
short xh0_2, xh1_2, xl0_2, xl1_2, xh0_3, xh1_3, xl0_3, xl1_3;
short x_4, x_5, x_6, x_7, x_l2_2, x_l2_3, x_h2_0, x_h2_1, x_h2_2, x_h2_3;
short x_8, x_9, x_a, x_b, x_c, x_d, x_e, x_f;
short si10, si20, si30, co10, co20, co30;
short si11, si21, si31, co11, co21, co31;
short * x, * x2, * x0;
short * y0, * y1, * y2, *y3;
short n00, n10, n20, n30, n01, n11, n21, n31;
short n02, n12, n22, n32, n03, n13, n23, n33;
short y0r, y0i, y4r, y4i;
int n0, j0;
int radix, m;
int norm;
const short *w;