Listing 2 An unrolled inner loop

       for (m = 0; m < mmax; m += 2) {
          j = m + mmax;
          tempr = (float) wr *(data1r = data[j]);
          tempi = (float) wi *(data1i = data[j + 1]);
          for (i = m; i < n - mmax * 2; i += mmax * 2) {
             /* mixed precision not significantly more
              * accurate here; if removing float casts,
              * tempr and temp1 should be double */
             tempr -= tempi;
             tempi = (float) wr*data1i + (float) wi *data1r;
             /* don't expect compiler to analyze j > i+1 */
             data1r = data[j + mmax * 2];
             data1i = data[j + mmax * 2 + 1];
             data[i] = (datar = data[i]) + tempr;
             data[i + 1] = (datai = data[i + 1]) + tempi;
             data[j] = datar - tempr;
             data[j + 1] = datai - tempi;
             tempr = (float) wr *data1r;
             tempi = (float) wi *data1i;
             j += mmax * 2;
          }
          tempr -= tempi;
          tempi = (float) wr *data1i + (float) wi *data1r;
          data[i] = (datar = data[i]) + tempr;
          data[i + 1] * (datai = data[i + 1]) + tempi;
          data[j] = datar - tempr;
          data[j + 1] = datai - tempi;
          wr= (wtemp = wr) * wpr - wi * wpi;
          wi = wtemp * wpi + wi * wpr;
       }
/* End of File */