static void ps_decorrelate_c(INTFLOAT (*out)[2], INTFLOAT (*delay)[2],

                             INTFLOAT (*ap_delay)[PS_QMF_TIME_SLOTS + PS_MAX_AP_DELAY][2],

                             const INTFLOAT phi_fract[2], const INTFLOAT (*Q_fract)[2],

                             const INTFLOAT *transient_gain,

                             INTFLOAT g_decay_slope,

                             int len)

{

    static const INTFLOAT a[] = { Q31(0.65143905753106f),

                               Q31(0.56471812200776f),

                               Q31(0.48954165955695f) };

    INTFLOAT ag[PS_AP_LINKS];

    int m, n;



    for (m = 0; m < PS_AP_LINKS; m++)

        ag[m] = AAC_MUL30(a[m], g_decay_slope);



    for (n = 0; n < len; n++) {

        INTFLOAT in_re = AAC_MSUB30(delay[n][0], phi_fract[0], delay[n][1], phi_fract[1]);

        INTFLOAT in_im = AAC_MADD30(delay[n][0], phi_fract[1], delay[n][1], phi_fract[0]);

        for (m = 0; m < PS_AP_LINKS; m++) {

            INTFLOAT a_re                = AAC_MUL31(ag[m], in_re);

            INTFLOAT a_im                = AAC_MUL31(ag[m], in_im);

            INTFLOAT link_delay_re       = ap_delay[m][n+2-m][0];

            INTFLOAT link_delay_im       = ap_delay[m][n+2-m][1];

            INTFLOAT fractional_delay_re = Q_fract[m][0];

            INTFLOAT fractional_delay_im = Q_fract[m][1];

            INTFLOAT apd_re = in_re;

            INTFLOAT apd_im = in_im;

            in_re = AAC_MSUB30(link_delay_re, fractional_delay_re,

                    link_delay_im, fractional_delay_im);

            in_re -= a_re;

            in_im = AAC_MADD30(link_delay_re, fractional_delay_im,

                    link_delay_im, fractional_delay_re);

            in_im -= a_im;

            ap_delay[m][n+5][0] = apd_re + AAC_MUL31(ag[m], in_re);

            ap_delay[m][n+5][1] = apd_im + AAC_MUL31(ag[m], in_im);

        }

        out[n][0] = AAC_MUL16(transient_gain[n], in_re);

        out[n][1] = AAC_MUL16(transient_gain[n], in_im);

    }

}

static void ps_decorrelate_c(INTFLOAT (*out)[2], INTFLOAT (*delay)[2],

                             INTFLOAT (*ap_delay)[PS_QMF_TIME_SLOTS + PS_MAX_AP_DELAY][2],

                             const INTFLOAT phi_fract[2], const INTFLOAT (*Q_fract)[2],

                             const INTFLOAT *transient_gain,

                             INTFLOAT g_decay_slope,

                             int len)

{

    static const INTFLOAT a[] = { Q31(0.65143905753106f),

                               Q31(0.56471812200776f),

                               Q31(0.48954165955695f) };

    INTFLOAT ag[PS_AP_LINKS];

    int m, n;



    for (m = 0; m < PS_AP_LINKS; m++)

        ag[m] = AAC_MUL30(a[m], g_decay_slope);



    for (n = 0; n < len; n++) {

        INTFLOAT in_re = AAC_MSUB30(delay[n][0], phi_fract[0], delay[n][1], phi_fract[1]);

        INTFLOAT in_im = AAC_MADD30(delay[n][0], phi_fract[1], delay[n][1], phi_fract[0]);

        for (m = 0; m < PS_AP_LINKS; m++) {

            INTFLOAT a_re                = AAC_MUL31(ag[m], in_re);

            INTFLOAT a_im                = AAC_MUL31(ag[m], in_im);

            INTFLOAT link_delay_re       = ap_delay[m][n+2-m][0];

            INTFLOAT link_delay_im       = ap_delay[m][n+2-m][1];

            INTFLOAT fractional_delay_re = Q_fract[m][0];

            INTFLOAT fractional_delay_im = Q_fract[m][1];

            INTFLOAT apd_re = in_re;

            INTFLOAT apd_im = in_im;

            in_re = AAC_MSUB30(link_delay_re, fractional_delay_re,

                    link_delay_im, fractional_delay_im);

            in_re -= a_re;

            in_im = AAC_MADD30(link_delay_re, fractional_delay_im,

                    link_delay_im, fractional_delay_re);

            in_im -= a_im;

            ap_delay[m][n+5][0] = apd_re + AAC_MUL31(ag[m], in_re);

            ap_delay[m][n+5][1] = apd_im + AAC_MUL31(ag[m], in_im);

        }

        out[n][0] = AAC_MUL16(transient_gain[n], in_re);

        out[n][1] = AAC_MUL16(transient_gain[n], in_im);

    }

}

            in_re -= a_re;             in_im -= a_im;             ap_delay[m][n+5][0] = apd_re + AAC_MUL31(ag[m], in_re);             ap_delay[m][n+5][1] = apd_im + AAC_MUL31(ag[m], in_im);
VAR_3staticVAR_3 VAR_3voidVAR_3 VAR_3ps_decorrelate_cVAR_3(VAR_3VAR_0VAR_3 (*VAR_3outVAR_3)[VAR_32VAR_3], VAR_3VAR_0VAR_3 (*VAR_3delayVAR_3)[VAR_32VAR_3],

                             VAR_3VAR_0VAR_3 (*VAR_3ap_delayVAR_3)[VAR_3PS_QMF_TIME_SLOTSVAR_3 + VAR_3PS_MAX_AP_DELAYVAR_3][VAR_32VAR_3],

                             VAR_3constVAR_3 VAR_3VAR_0VAR_3 VAR_3phi_fractVAR_3[VAR_32VAR_3], VAR_3constVAR_3 VAR_3VAR_0VAR_3 (*VAR_3Q_fractVAR_3)[VAR_32VAR_3],

                             VAR_3constVAR_3 VAR_3VAR_0VAR_3 *VAR_3transient_gainVAR_3,

                             VAR_3VAR_0VAR_3 VAR_3g_decay_slopeVAR_3,

                             VAR_3intVAR_3 VAR_3lenVAR_3)

{

    VAR_3staticVAR_3 VAR_3constVAR_3 VAR_3VAR_0VAR_3 VAR_3aVAR_3[] = { VAR_3Q31VAR_3(VAR_30VAR_3.VAR_365143905753106fVAR_3),

                               VAR_3Q31VAR_3(VAR_30VAR_3.VAR_356471812200776fVAR_3),

                               VAR_3Q31VAR_3(VAR_30VAR_3.VAR_348954165955695fVAR_3) };

    VAR_3VAR_0VAR_3 VAR_3agVAR_3[VAR_3PS_AP_LINKSVAR_3];

    VAR_3intVAR_3 VAR_3mVAR_3, VAR_3nVAR_3;



    VAR_3forVAR_3 (VAR_3mVAR_3 = VAR_30VAR_3; VAR_3mVAR_3 < VAR_3PS_AP_LINKSVAR_3; VAR_3mVAR_3++)

        VAR_3agVAR_3[VAR_3mVAR_3] = VAR_3AAC_MUL30VAR_3(VAR_3aVAR_3[VAR_3mVAR_3], VAR_3g_decay_slopeVAR_3);



    VAR_3forVAR_3 (VAR_3nVAR_3 = VAR_30VAR_3; VAR_3nVAR_3 < VAR_3lenVAR_3; VAR_3nVAR_3++) {

        VAR_3VAR_0VAR_3 VAR_3in_reVAR_3 = VAR_3AAC_MSUB30VAR_3(VAR_3delayVAR_3[VAR_3nVAR_3][VAR_30VAR_3], VAR_3phi_fractVAR_3[VAR_30VAR_3], VAR_3delayVAR_3[VAR_3nVAR_3][VAR_31VAR_3], VAR_3phi_fractVAR_3[VAR_31VAR_3]);

        VAR_3VAR_0VAR_3 VAR_3in_imVAR_3 = VAR_3AAC_MADD30VAR_3(VAR_3delayVAR_3[VAR_3nVAR_3][VAR_30VAR_3], VAR_3phi_fractVAR_3[VAR_31VAR_3], VAR_3delayVAR_3[VAR_3nVAR_3][VAR_31VAR_3], VAR_3phi_fractVAR_3[VAR_30VAR_3]);

        VAR_3forVAR_3 (VAR_3mVAR_3 = VAR_30VAR_3; VAR_3mVAR_3 < VAR_3PS_AP_LINKSVAR_3; VAR_3mVAR_3++) {

            VAR_3VAR_0VAR_3 VAR_3a_reVAR_3                = VAR_3AAC_MUL31VAR_3(VAR_3agVAR_3[VAR_3mVAR_3], VAR_3in_reVAR_3);

            VAR_3VAR_0VAR_3 VAR_3a_imVAR_3                = VAR_3AAC_MUL31VAR_3(VAR_3agVAR_3[VAR_3mVAR_3], VAR_3in_imVAR_3);

            VAR_3VAR_0VAR_3 VAR_3link_delay_reVAR_3       = VAR_3ap_delayVAR_3[VAR_3mVAR_3][VAR_3nVAR_3+VAR_32VAR_3-VAR_3mVAR_3][VAR_30VAR_3];

            VAR_3VAR_0VAR_3 VAR_3link_delay_imVAR_3       = VAR_3ap_delayVAR_3[VAR_3mVAR_3][VAR_3nVAR_3+VAR_32VAR_3-VAR_3mVAR_3][VAR_31VAR_3];

            VAR_3VAR_0VAR_3 VAR_3fractional_delay_reVAR_3 = VAR_3Q_fractVAR_3[VAR_3mVAR_3][VAR_30VAR_3];

            VAR_3VAR_0VAR_3 VAR_3fractional_delay_imVAR_3 = VAR_3Q_fractVAR_3[VAR_3mVAR_3][VAR_31VAR_3];

            VAR_3VAR_0VAR_3 VAR_3apd_reVAR_3 = VAR_3in_reVAR_3;

            VAR_3VAR_0VAR_3 VAR_3apd_imVAR_3 = VAR_3in_imVAR_3;

            VAR_3in_reVAR_3 = VAR_3AAC_MSUB30VAR_3(VAR_3link_delay_reVAR_3, VAR_3fractional_delay_reVAR_3,

                    VAR_3link_delay_imVAR_3, VAR_3fractional_delay_imVAR_3);

            VAR_3in_reVAR_3 -= VAR_3a_reVAR_3;

            VAR_3in_imVAR_3 = VAR_3AAC_MADD30VAR_3(VAR_3link_delay_reVAR_3, VAR_3fractional_delay_imVAR_3,

                    VAR_3link_delay_imVAR_3, VAR_3fractional_delay_reVAR_3);

            VAR_3in_imVAR_3 -= VAR_3a_imVAR_3;

            VAR_3ap_delayVAR_3[VAR_3mVAR_3][VAR_3nVAR_3+VAR_35VAR_3][VAR_30VAR_3] = VAR_3apd_reVAR_3 + VAR_3AAC_MUL31VAR_3(VAR_3agVAR_3[VAR_3mVAR_3], VAR_3in_reVAR_3);

            VAR_3ap_delayVAR_3[VAR_3mVAR_3][VAR_3nVAR_3+VAR_35VAR_3][VAR_31VAR_3] = VAR_3apd_imVAR_3 + VAR_3AAC_MUL31VAR_3(VAR_3agVAR_3[VAR_3mVAR_3], VAR_3in_imVAR_3);

        }

        VAR_3outVAR_3[VAR_3nVAR_3][VAR_30VAR_3] = VAR_3AAC_MUL16VAR_3(VAR_3transient_gainVAR_3[VAR_3nVAR_3], VAR_3in_reVAR_3);

        VAR_3outVAR_3[VAR_3nVAR_3][VAR_31VAR_3] = VAR_3AAC_MUL16VAR_3(VAR_3transient_gainVAR_3[VAR_3nVAR_3], VAR_3in_imVAR_3);

    }

}

VAR_3staticVAR_3 VAR_3voidVAR_3 VAR_3ps_decorrelate_cVAR_3(VAR_3VAR_0VAR_3 (*VAR_3outVAR_3)[VAR_32VAR_3], VAR_3VAR_0VAR_3 (*VAR_3delayVAR_3)[VAR_32VAR_3],
VAR_3VAR_0VAR_3 (*VAR_3ap_delayVAR_3)[VAR_3PS_QMF_TIME_SLOTSVAR_3 + VAR_3PS_MAX_AP_DELAYVAR_3][VAR_32VAR_3],
VAR_3constVAR_3 VAR_3VAR_0VAR_3 VAR_3phi_fractVAR_3[VAR_32VAR_3], VAR_3constVAR_3 VAR_3VAR_0VAR_3 (*VAR_3Q_fractVAR_3)[VAR_32VAR_3],
VAR_3constVAR_3 VAR_3VAR_0VAR_3 *VAR_3transient_gainVAR_3,
VAR_3VAR_0VAR_3 VAR_3g_decay_slopeVAR_3,
VAR_3intVAR_3 VAR_3lenVAR_3)
{ VAR_3staticVAR_3 VAR_3constVAR_3 VAR_3VAR_0VAR_3 VAR_3aVAR_3[] = { VAR_3Q31VAR_3(VAR_30VAR_3.VAR_365143905753106fVAR_3), VAR_3Q31VAR_3(VAR_30VAR_3.VAR_356471812200776fVAR_3),
VAR_3Q31VAR_3(VAR_30VAR_3.VAR_348954165955695fVAR_3) }; VAR_3VAR_0VAR_3 VAR_3agVAR_3[VAR_3PS_AP_LINKSVAR_3]; VAR_3intVAR_3 VAR_3mVAR_3, VAR_3nVAR_3; VAR_3forVAR_3 (VAR_3mVAR_3 = VAR_30VAR_3; VAR_3mVAR_3 < VAR_3PS_AP_LINKSVAR_3; VAR_3mVAR_3++) VAR_3agVAR_3[VAR_3mVAR_3] = VAR_3AAC_MUL30VAR_3(VAR_3aVAR_3[VAR_3mVAR_3], VAR_3g_decay_slopeVAR_3); VAR_3forVAR_3 (VAR_3nVAR_3 = VAR_30VAR_3; VAR_3nVAR_3 < VAR_3lenVAR_3; VAR_3nVAR_3++) { VAR_3VAR_0VAR_3 VAR_3in_reVAR_3 = VAR_3AAC_MSUB30VAR_3(VAR_3delayVAR_3[VAR_3nVAR_3][VAR_30VAR_3], VAR_3phi_fractVAR_3[VAR_30VAR_3], VAR_3delayVAR_3[VAR_3nVAR_3][VAR_31VAR_3], VAR_3phi_fractVAR_3[VAR_31VAR_3]); VAR_3VAR_0VAR_3 VAR_3in_imVAR_3 = VAR_3AAC_MADD30VAR_3(VAR_3delayVAR_3[VAR_3nVAR_3][VAR_30VAR_3], VAR_3phi_fractVAR_3[VAR_31VAR_3], VAR_3delayVAR_3[VAR_3nVAR_3][VAR_31VAR_3], VAR_3phi_fractVAR_3[VAR_30VAR_3]); VAR_3forVAR_3 (VAR_3mVAR_3 = VAR_30VAR_3; VAR_3mVAR_3 < VAR_3PS_AP_LINKSVAR_3; VAR_3mVAR_3++) { VAR_3VAR_0VAR_3 VAR_3a_reVAR_3                = VAR_3AAC_MUL31VAR_3(VAR_3agVAR_3[VAR_3mVAR_3], VAR_3in_reVAR_3); VAR_3VAR_0VAR_3 VAR_3a_imVAR_3                = VAR_3AAC_MUL31VAR_3(VAR_3agVAR_3[VAR_3mVAR_3], VAR_3in_imVAR_3); VAR_3VAR_0VAR_3 VAR_3link_delay_reVAR_3       = VAR_3ap_delayVAR_3[VAR_3mVAR_3][VAR_3nVAR_3+VAR_32VAR_3-VAR_3mVAR_3][VAR_30VAR_3]; VAR_3VAR_0VAR_3 VAR_3link_delay_imVAR_3       = VAR_3ap_delayVAR_3[VAR_3mVAR_3][VAR_3nVAR_3+VAR_32VAR_3-VAR_3mVAR_3][VAR_31VAR_3]; VAR_3VAR_0VAR_3 VAR_3fractional_delay_reVAR_3 = VAR_3Q_fractVAR_3[VAR_3mVAR_3][VAR_30VAR_3]; VAR_3VAR_0VAR_3 VAR_3fractional_delay_imVAR_3 = VAR_3Q_fractVAR_3[VAR_3mVAR_3][VAR_31VAR_3]; VAR_3VAR_0VAR_3 VAR_3apd_reVAR_3 = VAR_3in_reVAR_3; VAR_3VAR_0VAR_3 VAR_3apd_imVAR_3 = VAR_3in_imVAR_3; VAR_3in_reVAR_3 = VAR_3AAC_MSUB30VAR_3(VAR_3link_delay_reVAR_3, VAR_3fractional_delay_reVAR_3,
VAR_3link_delay_imVAR_3, VAR_3fractional_delay_imVAR_3); VAR_3in_reVAR_3 -= VAR_3a_reVAR_3; VAR_3in_imVAR_3 = VAR_3AAC_MADD30VAR_3(VAR_3link_delay_reVAR_3, VAR_3fractional_delay_imVAR_3,
VAR_3link_delay_imVAR_3, VAR_3fractional_delay_reVAR_3); VAR_3in_imVAR_3 -= VAR_3a_imVAR_3; VAR_3ap_delayVAR_3[VAR_3mVAR_3][VAR_3nVAR_3+VAR_35VAR_3][VAR_30VAR_3] = VAR_3apd_reVAR_3 + VAR_3AAC_MUL31VAR_3(VAR_3agVAR_3[VAR_3mVAR_3], VAR_3in_reVAR_3); VAR_3ap_delayVAR_3[VAR_3mVAR_3][VAR_3nVAR_3+VAR_35VAR_3][VAR_31VAR_3] = VAR_3apd_imVAR_3 + VAR_3AAC_MUL31VAR_3(VAR_3agVAR_3[VAR_3mVAR_3], VAR_3in_imVAR_3); } VAR_3outVAR_3[VAR_3nVAR_3][VAR_30VAR_3] = VAR_3AAC_MUL16VAR_3(VAR_3transient_gainVAR_3[VAR_3nVAR_3], VAR_3in_reVAR_3); VAR_3outVAR_3[VAR_3nVAR_3][VAR_31VAR_3] = VAR_3AAC_MUL16VAR_3(VAR_3transient_gainVAR_3[VAR_3nVAR_3], VAR_3in_imVAR_3); } }