DSP_fft16x16t
#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; |