| 994 | } |
| 995 | |
| 996 | static void bfR4(SPFLOAT * ioptr, int M, int NDiffU) |
| 997 | { |
| 998 | /*** 1 radix 4 stage ***/ |
| 999 | unsigned int pos; |
| 1000 | unsigned int posi; |
| 1001 | unsigned int pinc; |
| 1002 | unsigned int pnext; |
| 1003 | unsigned int pnexti; |
| 1004 | unsigned int NSameU; |
| 1005 | unsigned int SameUCnt; |
| 1006 | |
| 1007 | SPFLOAT * pstrt; |
| 1008 | SPFLOAT *p0r, *p1r, *p2r, *p3r; |
| 1009 | |
| 1010 | SPFLOAT w1r = 1.0 / MYROOT2; /* cos(pi/4) */ |
| 1011 | SPFLOAT f0r, f0i, f1r, f1i, f2r, f2i, f3r, f3i; |
| 1012 | SPFLOAT f4r, f4i, f5r, f5i, f6r, f6i, f7r, f7i; |
| 1013 | SPFLOAT t1r, t1i; |
| 1014 | const SPFLOAT Two = 2.0; |
| 1015 | |
| 1016 | pinc = NDiffU * 2; /* 2 floats per complex */ |
| 1017 | pnext = pinc * 4; |
| 1018 | pnexti = pnext + 1; |
| 1019 | pos = 2; |
| 1020 | posi = pos + 1; |
| 1021 | NSameU = POW2(M) / 4 / NDiffU; /* 4 pts per butterfly */ |
| 1022 | pstrt = ioptr; |
| 1023 | p0r = pstrt; |
| 1024 | p1r = pstrt + pinc; |
| 1025 | p2r = p1r + pinc; |
| 1026 | p3r = p2r + pinc; |
| 1027 | |
| 1028 | /* Butterflys */ |
| 1029 | /* |
| 1030 | f0 - - f0 - - f4 |
| 1031 | f1 - 1 - f5 - - f5 |
| 1032 | f2 - - f6 - 1 - f6 |
| 1033 | f3 - 1 - f3 - -i - f7 |
| 1034 | */ |
| 1035 | /* Butterflys */ |
| 1036 | /* |
| 1037 | f0 - - f4 - - f4 |
| 1038 | f1 - -i - t1 - - f5 |
| 1039 | f2 - - f2 - w1 - f6 |
| 1040 | f3 - -i - f7 - iw1- f7 |
| 1041 | */ |
| 1042 | |
| 1043 | f0r = *p0r; |
| 1044 | f1r = *p1r; |
| 1045 | f2r = *p2r; |
| 1046 | f3r = *p3r; |
| 1047 | f0i = *(p0r + 1); |
| 1048 | f1i = *(p1r + 1); |
| 1049 | f2i = *(p2r + 1); |
| 1050 | f3i = *(p3r + 1); |
| 1051 | |
| 1052 | f5r = f0r - f1r; |
| 1053 | f5i = f0i - f1i; |