static void fft15(CeltIMDCTContext *s, FFTComplex *out, const FFTComplex *in, ptrdiff_t stride) { const FFTComplex *exptab = s->exptab[0]; FFTComplex tmp[5]; FFTComplex tmp1[5]; FFTComplex tmp2[5]; int k; fft5(tmp, in, stride * 3); fft5(tmp1, in + stride, stride * 3); fft5(tmp2, in + 2 * stride, stride * 3); for (k = 0; k < 5; k++) { FFTComplex t1, t2; CMUL(t1, tmp1[k], exptab[k]); CMUL(t2, tmp2[k], exptab[2 * k]); out[k].re = tmp[k].re + t1.re + t2.re; out[k].im = tmp[k].im + t1.im + t2.im; CMUL(t1, tmp1[k], exptab[k + 5]); CMUL(t2, tmp2[k], exptab[2 * (k + 5)]); out[k + 5].re = tmp[k].re + t1.re + t2.re; out[k + 5].im = tmp[k].im + t1.im + t2.im; CMUL(t1, tmp1[k], exptab[k + 10]); CMUL(t2, tmp2[k], exptab[2 * k + 5]); out[k + 10].re = tmp[k].re + t1.re + t2.re; out[k + 10].im = tmp[k].im + t1.im + t2.im; } }
static void fft15_c(FFTComplex *out, FFTComplex *in, FFTComplex *exptab, ptrdiff_t stride) { int k; FFTComplex tmp1[5], tmp2[5], tmp3[5]; fft5(tmp1, in + 0, exptab + 19); fft5(tmp2, in + 1, exptab + 19); fft5(tmp3, in + 2, exptab + 19); for (k = 0; k < 5; k++) { FFTComplex t[2]; CMUL3(t[0], tmp2[k], exptab[k]); CMUL3(t[1], tmp3[k], exptab[2 * k]); out[stride*k].re = tmp1[k].re + t[0].re + t[1].re; out[stride*k].im = tmp1[k].im + t[0].im + t[1].im; CMUL3(t[0], tmp2[k], exptab[k + 5]); CMUL3(t[1], tmp3[k], exptab[2 * (k + 5)]); out[stride*(k + 5)].re = tmp1[k].re + t[0].re + t[1].re; out[stride*(k + 5)].im = tmp1[k].im + t[0].im + t[1].im; CMUL3(t[0], tmp2[k], exptab[k + 10]); CMUL3(t[1], tmp3[k], exptab[2 * k + 5]); out[stride*(k + 10)].re = tmp1[k].re + t[0].re + t[1].re; out[stride*(k + 10)].im = tmp1[k].im + t[0].im + t[1].im; } }