CSPspEmu.Hle.Formats.audio.At3.MaiAT3PlusCoreDecoder.decodeStream C# (CSharp) Method

decodeStream() public method

public decodeStream ( uint chns ) : int
chns uint
return int
        public int decodeStream(uint chns)
        {
            int rs = 0;

            float* mdata0_0 = stackalloc float[0x800];
            float* mdata0_1 = stackalloc float[0x800];
            float** mdata0_table = stackalloc float*[2];
            mdata0_table[0] = mdata0_0;
            mdata0_table[1] = mdata0_1;

            {
                MAPCDDF_initMDataTable(chn_info, mdata0_table, chns);//

                if (true)
                {
                    for (int a00 = 0; a00 < chns; a00++)
                    {

                        float** l2080 = stackalloc float*[0x10];
                        float* l2048 = stackalloc float[0x800];

                        for (int a0 = 0; a0 < 0x800; a0++) l2048[a0] = 0.0f;

                        for (int a0 = 0; a0 < 0x10; a0++)
                        {
                            l2080[a0] = &l2048[a0 * 0x80];
                        }

                        for (int a0 = 0; a0 < chn_info[0].joint_chn_info.num_band_declared; a0++)
                        {
                            chn_info[a00].acc_data_now.table[a0].acc_now =
                                chn_info[a00].acc_data_now.acc.data[a0];
                        }

                        {
                            float* l512 = stackalloc float[0x100];
                            float* l256 = stackalloc float[0x100];

                            for (int a0 = 0; a0 < chn_info[0].joint_chn_info.num_band_declared; a0++)
                            {
                                ManagedPointer<float> table_shita = null;

                                if ( chn_info[a00].acc_data_old.table[a0].acc_now
                                    == 0)
                                {
                                    if ( chn_info[a00].acc_data_now.table[a0].acc_now
                                        == 0)
                                    {
                                        table_shita = MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_1.GetPointer(0x000);
                                    }
                                    else
                                    {
                                        table_shita = MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_1.GetPointer(0x100);
                                    }
                                }
                                else
                                {
                                    if ( chn_info[a00].acc_data_now.table[a0].acc_now
                                        == 0)
                                    {
                                        table_shita = MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_1.GetPointer(0x200);
                                    }
                                    else
                                    {
                                        table_shita = MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_1.GetPointer(0x300);
                                    }
                                }

                                {
                                    float* stmp40 = stackalloc float[0x80];

                                    for (uint a1 = 0; a1 < 0x40; a1++)
                                    {
                                        if ((a0 & 1) != 0)
                                        {
                                            stmp40[a1 * 2] = mdata0_table[a00][0x80 * a0 + a1 * 2] * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_sin0[a1]
                                                + mdata0_table[a00][0x80 * a0 + 0x80 - a1 * 2 - 1] * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_cos0[a1];
                                            stmp40[a1 * 2 + 1] = mdata0_table[a00][0x80 * a0 + 0x80 - a1 * 2 - 1] * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_sin0[a1]
                                                - mdata0_table[a00][0x80 * a0 + a1 * 2] * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_cos0[a1];

                                        }
                                        else
                                        {
                                            stmp40[a1 * 2] = mdata0_table[a00][0x80 * a0 + 0x80 - a1 * 2 - 1] * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_sin0[a1]
                                                + mdata0_table[a00][0x80 * a0 + a1 * 2] * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_cos0[a1];
                                            stmp40[a1 * 2 + 1] = mdata0_table[a00][0x80 * a0 + a1 * 2] * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_sin0[a1]
                                                - mdata0_table[a00][0x80 * a0 + 0x80 - a1 * 2 - 1] * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_cos0[a1];
                                        }
                                    }

                                    for (uint a2 = 0; a2 < 6; a2++)
                                    {
                                        for (uint a3 = 0; a3 < (1 << (int)a2); a3++)
                                        {
                                            uint base0 = (uint)((0x40 >> (int)a2));
                                            uint base1 = (uint)((0x80 >> (int)a2) * a3);
                                            for (uint a1 = 0; a1 < (0x20 >> (int)a2); a1++)
                                            {
                                                float ftmp0 = stmp40[base1 + a1 * 2 + 1] + stmp40[base1 + a1 * 2 + 1 + base0];
                                                float ftmp1 = stmp40[base1 + a1 * 2] - stmp40[base1 + a1 * 2 + base0];
                                                float ftmp2 = stmp40[base1 + a1 * 2 + 1] - stmp40[base1 + a1 * 2 + 1 + base0];
                                                float ftmp3 = stmp40[base1 + a1 * 2] + stmp40[base1 + a1 * 2 + base0];

                                                stmp40[base1 + a1 * 2] = ftmp3;
                                                stmp40[base1 + a1 * 2 + 1] = ftmp0;

                                                stmp40[base1 + a1 * 2 + base0] = ftmp2 * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_sin1[a2 * 0x20 + a1]
                                                    + ftmp1 * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_cos1[a2 * 0x20 + a1];
                                                stmp40[base1 + a1 * 2 + 1 + base0] = ftmp1 * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_sin1[a2 * 0x20 + a1]
                                                    - ftmp2 * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_cos1[a2 * 0x20 + a1];
                                            }
                                        }
                                    }

                                    for (uint a1 = 0; a1 < 0x40; a1++)
                                    {
                                        l512[a1] = stmp40[search_table_tmp0[a1]] * table_shita[a1];
                                        l512[0xC0 + a1] = (-1.0f) * stmp40[search_table_tmp1[a1]] * table_shita[0xc0 + a1];
                                    }

                                    for (uint a1 = 0; a1 < 0x80; a1++)
                                    {
                                        l512[0x40 + a1] = (-1.0f) * stmp40[search_table_tmp2[0x80 - a1 - 1]] * table_shita[0x40 + a1];
                                    }

                                }

                                if ( (chn_info[a00].acc_data_old.table[a0].num_acc != 0) || (chn_info[a00].acc_data_now.table[a0].num_acc != 0) )
                                {
                                    int rt_3 = 0;

                                    {
                                        int* l63 = stackalloc int[0x40];
                                        for (int a1 = 0; a1 < 0x40; a1++) l63[a1] = 0;

                                        int dtmp0 = 0;
                                        for (int a1 = 0; a1 < chn_info[a00].acc_data_now.table[a0].num_acc; a1++)
                                        {
                                            if (dtmp0 <= 0x20 +
                                                chn_info[a00].acc_data_now.table[a0].data0[a1] )
                                            {
                                                for (int a2 = dtmp0; a2 < 0x20 + 0x1 +
                                                    chn_info[a00].acc_data_now.table[a0].data0[a1];
                                                    a2++)
                                                {
                                                    l63[dtmp0++] = table_tmp4[chn_info[a00].acc_data_now.table[a0].data1[a1]];
                                                }

                                            }
                                        }

                                        int atmp5 = 0;
                                        for (int a1 = 0; a1 < chn_info[a00].acc_data_old.table[a0].num_acc; a1++)
                                        {

                                            for (int a2 = atmp5; a2 < 0x1 +
                                                    chn_info[a00].acc_data_old.table[a0].data0[a1];
                                                    a2++)
                                            {
                                                l63[atmp5++] += table_tmp4[chn_info[a00].acc_data_old.table[a0].data1[a1]];
                                            }
                                        }

                                        float l64 = 0.0f;
                                        int ctmp1 = 0 - l63[0x3F];
                                        if (ctmp1 >= 0)
                                        {
                                            l64 = (float)(1 << ctmp1);
                                        }
                                        else
                                        {
                                            l64 = 1.0f / (1 << l63[0x3F]);
                                        }

                                        int itmp1 = 0;
                                        int dtmp1 = 0xFF;
                                        int atmp1 = 0x100;
                                        for (int a1 = 0x3f; a1 >= 0; a1--)
                                        {
                                            if (l63[a1] == itmp1)
                                            {
                                                l256[dtmp1--] = l64;
                                                l256[dtmp1--] = l64;
                                                l256[dtmp1--] = l64;
                                            }
                                            else
                                            {
                                                l64 = 0.0f;
                                                if (atmp1 == 0x100)
                                                {
                                                    atmp1 = dtmp1;
                                                }

                                                if (l63[a1] < itmp1)
                                                {
                                                    int ctmp2 = 0 - l63[a1];
                                                    int itmp2 = itmp1 - l63[a1] - 1;

                                                    if (ctmp2 >= 0)
                                                    {
                                                        l64 = (float)(1 << ctmp2);
                                                    }
                                                    else
                                                    {
                                                        l64 = 1.0f / (1 << l63[a1]);
                                                    }

                                                    itmp2 *= 3;

                                                    l256[dtmp1--] = l64 * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_2[itmp2];
                                                    l256[dtmp1--] = l64 * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_2[itmp2 + 1];
                                                    l256[dtmp1--] = l64 * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_2[itmp2 + 2];
                                                }
                                                else
                                                {
                                                    int ctmp2 = 0 - itmp1;
                                                    int btmp_2 = l63[a1] - itmp1 - 1;

                                                    if (ctmp2 >= 0)
                                                    {
                                                        l64 = (float)(1 << ctmp2);
                                                    }
                                                    else
                                                    {
                                                        l64 = 1.0f / (1 << itmp1);
                                                    }

                                                    btmp_2 *= 3;

                                                    l256[dtmp1--] = l64 * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_2[btmp_2 + 2];
                                                    l256[dtmp1--] = l64 * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_2[btmp_2 + 1];
                                                    l256[dtmp1--] = l64 * MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_2[btmp_2];

                                                    ctmp2 = 0 - l63[a1];
                                                    if (ctmp2 >= 0)
                                                    {
                                                        l64 = (float)(1 << ctmp2);
                                                    }
                                                    else
                                                    {
                                                        l64 = 1.0f / (1 << l63[a1]);
                                                    }
                                                }

                                                itmp1 = l63[a1];
                                            }

                                            l256[dtmp1--] = l64;
                                        }

                                        rt_3 = atmp1;
                                        if (rt_3 == 0x100) rt_3 = 0xFF;
                                    }

                                    for (int a1 = 0x80; a1 <= rt_3; a1++)
                                    {
                                        l512[a1] *= l256[a1];
                                    }

                                    for (int a1 = 0; a1 < 0x80; a1++)
                                    {
                                        l2080[a0][a1] = kyou_buf[a00][a0 * 0x80 + a1] + l512[a1] * l256[a1];
                                    }
                                }
                                else
                                {
                                    {
                                        for (int a1 = 0; a1 < 0x80; a1++)
                                        {
                                            l2080[a0][a1] = kyou_buf[a00][a0 * 0x80 + a1] + l512[a1];
                                        }
                                    }
                                }

                                for (int a1 = 0; a1 < 0x80; a1++)
                                {
                                    kyou_buf[a00][a0 * 0x80 + a1] = l512[0x80 + a1];
                                }
                            }

                            for (int a0 = (int)chn_info[0].joint_chn_info.num_band_declared; a0 < 0x10; a0++)
                            {
                                for (int a1 = 0; a1 < 0x80; a1++)
                                {
                                    kyou_buf[a00][a0 * 0x80 + a1] = 0.0f;
                                }
                            }

                        }

                        {
                            if ( (chn_info[a00].acc_table_old.inner.unk0 != 0) || (chn_info[a00].acc_table_now.inner.unk0 != 0) )
                            {
                                for (int a0 = 0; a0 < 0x10; a0++)
                                {
                                    {
                                        if ( (chn_info[a00].acc_table_now.table[a0].unk[4] != 0) &&
                                            ( (chn_info[a00].acc_table_now.table[a0].unk[6])
                                            < (chn_info[a00].acc_table_now.table[a0].unk[7]) )
                                            )
                                        {
                                            chn_info[a00].acc_table_now.table[a0].unk[2] =
                                                chn_info[a00].acc_table_now.table[a0].unk[6]
                                                * 4
                                                + 0x80;

                                            chn_info[a00].acc_table_now.table[a0].unk[0] = 1;
                                        }
                                        else
                                        {
                                            if ((chn_info[a00].acc_table_old.table[a0].unk[4]) == 0)
                                            {
                                                chn_info[a00].acc_table_now.table[a0].unk[2] = 0;
                                                chn_info[a00].acc_table_now.table[a0].unk[0] = 0;
                                            }
                                            else
                                            {
                                                chn_info[a00].acc_table_now.table[a0].unk[2] =
                                                    chn_info[a00].acc_table_old.table[a0].unk[6]
                                                    * 4;
                                                chn_info[a00].acc_table_now.table[a0].unk[0] = 1;
                                            }
                                        }

                                        if ( (chn_info[a00].acc_table_old.table[a0].unk[5] != 0) && (
                                            (chn_info[a00].acc_table_now.table[a0].unk[2]) <= (4 * (chn_info[a00].acc_table_old.table[a0].unk[7]) )
                                            ) )
                                        {
                                            chn_info[a00].acc_table_now.table[a0].unk[3] =
                                                4 * (chn_info[a00].acc_table_old.table[a0].unk[7]);

                                            chn_info[a00].acc_table_now.table[a0].unk[1] = 1;
                                        }
                                        else
                                        {
                                            if (chn_info[a00].acc_table_now.table[a0].unk[5] != 0)
                                            {
                                                chn_info[a00].acc_table_now.table[a0].unk[3] =
                                                    chn_info[a00].acc_table_now.table[a0].unk[7]
                                                    * 4
                                                    + 0x80;

                                                chn_info[a00].acc_table_now.table[a0].unk[1] = 1;
                                            }
                                            else
                                            {
                                                chn_info[a00].acc_table_now.table[a0].unk[3] = 0x100;

                                                chn_info[a00].acc_table_now.table[a0].unk[1] = 0;
                                            }
                                        }

                                        chn_info[a00].acc_table_now.table[a0].unk[3] += 4;
                                        if ( (chn_info[a00].acc_table_now.table[a0].unk[3])
                                            > 0x100)
                                        {
                                            chn_info[a00].acc_table_now.table[a0].unk[3] =
                                                0x100;
                                        }

                                    }

                                    if ( (chn_info[a00].acc_table_now.table[a0].num_uk != 0) || (chn_info[a00].acc_table_old.table[a0].num_uk != 0) )
                                    {
                                        float* l128 = stackalloc float[0x80];

                                        {
                                            MAPCDDF_makeL128(
                                                chn_info[a00].acc_table_old.table[a0],
                                                chn_info[a00].acc_table_old.inner.unk1,
                                                chn_info[a00].acc_table_old.inner.table_unk1.data[a0],
                                                chn_info[a00].acc_table_now.table[a0],
                                                chn_info[a00].acc_table_now.inner.unk1,
                                                chn_info[a00].acc_table_now.inner.table_unk1.data[a0],
                                                l128,
                                                a00
                                            );
                                        }

                                        {
                                            for (int a1 = 0; a1 < 0x80; a1++)
                                            {
                                                l2080[a0][a1] += l128[a1];
                                            }
                                        }

                                    }

                                }
                            }
                        }

                        {
                            if (chn_info[0].joint_chn_info.var94 != 0)
                            {
                                float tmpf0 = (float)(1 << chn_info[0].joint_chn_info.var98);
                                for (int a0 = 0; a0 < 0x10; a0++)
                                {
                                    for (int a1 = 0; a1 < 0x80; a1++)
                                    {
                                        // @TODO: Check
                                        int index1 = table_59e660[chn_info[0].joint_chn_info.var9c];
                                        //int index1 = table_59e660[chn_info[0].joint_chn_info.var9c % table_59e660.Length];
                                        l2080[a0][a1] += MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_0[index1 + a1] * tmpf0;
                                    }
                                    chn_info[0].joint_chn_info.var9c++;
                                }
                            }
                        }

                        {
                            float[] buf_ctmp1 = syn_buf[a00];

                            float[] dst0 = dst_buf[a00];
                            for (int a0 = 0; a0 < 0x800; a0++) dst0[a0] = 0.0f;

                            for (int a0 = 0; a0 < 0x80; a0++)
                            {
                                float* stmp140 = stackalloc float[0x10];
                                float* stmp30 = stackalloc float[0x100];

                                ulong atmp0 = 0x55555556;
                                atmp0 *= (ulong)(a0 + c900);
                                uint atmp1 = (uint)(atmp0 >> 32);
                                atmp1 = (atmp1 >> 0x1F) + atmp1;
                                atmp1 *= 3;
                                uint mtmp0 = (uint)(c900 - atmp1 + a0);

                                for (int a1 = 0; a1 < 0x10; a1++)
                                {
                                    stmp140[a1] = l2080[a1][a0] * table_626a90[a1];
                                }

                                for (int a1 = 0; a1 < 4; a1++)
                                {
                                    stmp30[a1] = stmp140[a1] + stmp140[0x7 - a1] + stmp140[0x8 + a1] + stmp140[0xF - a1];
                                }

                                for (int a1 = 0; a1 < 4; a1++)
                                {
                                    stmp30[0x4 + a1] = stmp140[a1] + stmp140[0xF - a1] - stmp140[0x7 - a1] - stmp140[0x8 + a1];
                                    stmp30[0x4 + a1] *= table_626af0[a1];
                                }

                                for (int a1 = 0; a1 < 4; a1++)
                                {
                                    stmp30[0xC + a1] = stmp140[0x7 - a1] - stmp140[0x8 + a1];
                                    stmp30[0xC + a1] *= table_626ae0[3 - a1];
                                    stmp30[0xC + a1] = (stmp140[a1] - stmp140[0xF - a1]) * table_626ad0[a1] - stmp30[0xC + a1];
                                    stmp30[0xC + a1] *= table_626af0[a1];
                                }

                                for (int a1 = 0; a1 < 4; a1++)
                                {
                                    stmp30[0x8 + a1] = stmp140[0x7 - a1] - stmp140[0x8 + a1];
                                    stmp30[0x8 + a1] *= table_626ae0[3 - a1];
                                    stmp30[0x8 + a1] = (stmp140[a1] - stmp140[0xF - a1]) * table_626ad0[a1] + stmp30[0x8 + a1];
                                }

                                float* locals = stackalloc float[0x100];
                                locals[72] = stmp30[0] + stmp30[1] + stmp30[2] + stmp30[3];
                                locals[72] *= 0.5f;

                                float* calc_buf = stackalloc float[0x100];
                                int calc_n = 0;
                                calc_buf[++calc_n] = stmp30[0] - stmp30[1] - stmp30[2] + stmp30[3];
                                calc_buf[calc_n] *= 0.7071068f;
                                calc_buf[++calc_n] = stmp30[0] - stmp30[3];
                                calc_buf[calc_n] *= 1.847759f;
                                calc_buf[++calc_n] = stmp30[1] - stmp30[2];
                                calc_buf[calc_n] *= 0.7653669f;
                                calc_buf[++calc_n] = 0.2071068f;
                                calc_buf[calc_n] *= calc_buf[calc_n - 2];
                                calc_buf[++calc_n] = 1.207107f;
                                calc_buf[calc_n] *= calc_buf[calc_n - 2];
                                calc_buf[calc_n - 1] -= calc_buf[calc_n];
                                calc_n--;
                                locals[20] = calc_buf[calc_n--];
                                calc_buf[++calc_n] = stmp30[4] - stmp30[7];
                                calc_buf[calc_n] *= 1.847759f;
                                calc_buf[++calc_n] = stmp30[5] - stmp30[6];
                                calc_buf[calc_n] *= 0.7653669f;
                                locals[30] = stmp30[4] + stmp30[5] + stmp30[6] + stmp30[7];
                                locals[30] *= 0.5f;
                                locals[26] = calc_buf[calc_n] + calc_buf[calc_n - 1];
                                locals[26] *= 0.5f;
                                locals[26] -= locals[30];
                                locals[22] = stmp30[4] - stmp30[5] - stmp30[6] + stmp30[7];
                                locals[22] *= 0.7071068f;
                                locals[22] -= locals[26];
                                calc_buf[calc_n] = calc_buf[calc_n - 1] * 0.2071068f - calc_buf[calc_n] * 1.207107f;
                                calc_buf[calc_n] -= locals[22];
                                locals[18] = calc_buf[calc_n--];
                                calc_n--;
                                calc_buf[++calc_n] = stmp30[8] + stmp30[9] + stmp30[10] + stmp30[11];
                                calc_buf[calc_n] *= 0.5f;
                                locals[71] = calc_buf[calc_n] - locals[72];
                                locals[70] = locals[30] - locals[71];
                                locals[36] = stmp30[8] - stmp30[9] - stmp30[10] + stmp30[11];
                                locals[36] *= 0.7071068f;
                                calc_buf[++calc_n] = stmp30[8] - stmp30[11];
                                calc_buf[calc_n] *= 1.847759f;
                                calc_buf[++calc_n] = stmp30[9] - stmp30[10];
                                calc_buf[calc_n] *= 0.7653669f;
                                calc_buf[++calc_n] = 0.2071068f;
                                calc_buf[calc_n] *= calc_buf[calc_n - 2];
                                calc_buf[++calc_n] = 1.207107f;
                                calc_buf[calc_n] *= calc_buf[calc_n - 2];
                                calc_buf[calc_n - 1] -= calc_buf[calc_n];
                                calc_n--;
                                locals[34] = calc_buf[calc_n--];
                                calc_buf[++calc_n] = stmp30[12] + stmp30[13] + stmp30[14] + stmp30[15];
                                calc_buf[calc_n] *= 0.5f;
                                calc_buf[calc_n] -= calc_buf[calc_n - 3];
                                locals[69] = calc_buf[calc_n] - locals[70];
                                locals[27] = (calc_buf[calc_n - 1] + calc_buf[calc_n - 2]) * 0.5f - calc_buf[calc_n];
                                calc_n -= 4;
                                locals[68] = (calc_buf[calc_n] + calc_buf[calc_n - 1]) * 0.5f - locals[69];
                                calc_n -= 2;
                                calc_buf[++calc_n] = stmp30[12] - stmp30[15];
                                calc_buf[calc_n] *= 1.847759f;
                                locals[67] = locals[27] - locals[68];
                                calc_buf[++calc_n] = stmp30[13] - stmp30[14];
                                calc_buf[calc_n] *= 0.7653669f;
                                locals[66] = locals[26] - locals[67];
                                locals[37] = calc_buf[calc_n] + calc_buf[calc_n - 1] - stmp30[12] - stmp30[13] - stmp30[14] - stmp30[15];
                                locals[37] *= 0.5f;
                                locals[35] = stmp30[12] - stmp30[13] - stmp30[14] + stmp30[15];
                                locals[35] *= 0.7071068f;
                                locals[35] -= locals[37];
                                calc_buf[calc_n - 1] *= 0.2071068f;
                                calc_buf[calc_n] *= 1.207107f;
                                calc_buf[calc_n - 1] -= calc_buf[calc_n];
                                calc_n--;
                                calc_buf[calc_n] -= locals[35];
                                calc_buf[++calc_n] = locals[37] - locals[27];
                                locals[65] = calc_buf[calc_n] - locals[66];
                                calc_buf[calc_n + 1] = calc_buf[calc_n];
                                calc_buf[calc_n] = calc_buf[calc_n - 2];
                                calc_buf[calc_n - 2] =calc_buf[calc_n + 1];
                                locals[64] = calc_buf[calc_n] - locals[65];
                                calc_n--;
                                calc_buf[calc_n - 1] = locals[36] - calc_buf[calc_n - 1];
                                locals[63] = calc_buf[calc_n - 1] - locals[64];
                                locals[62] = locals[22] - locals[63];
                                calc_buf[calc_n - 1] = locals[35] - calc_buf[calc_n - 1];
                                locals[61] = calc_buf[calc_n - 1] - locals[62];
                                locals[60] = locals[20] - locals[61];
                                calc_buf[calc_n - 1] = locals[34] - calc_buf[calc_n - 1];
                                locals[59] = calc_buf[calc_n - 1] - locals[60];
                                locals[58] = locals[18] - locals[59];
                                calc_buf[calc_n] -= calc_buf[calc_n - 1];
                                locals[57] = calc_buf[calc_n] - locals[58];
                                calc_n -= 2;

                                uint atmp2 = table_5b4050[mtmp0 + 0xF];

                                for (int a2 = 0; a2 < 0x10; a2++)
                                {
                                    buf_ctmp1[atmp2 - 0xF + a2] = locals[57 + a2];
                                }

                                for (int a2 = 0; a2 < 4; a2++)
                                {
                                    buf_ctmp1[table_5b4050[mtmp0] + 0x30 + a2] =  buf_ctmp1[table_5b4050[mtmp0 + 0x12] + 0x4 + 3 - a2] * table_5b3ed0[a2] + table_5b3d50[a2] * buf_ctmp1[table_5b4050[mtmp0 + 3] + a2];
                                }

                                for (int a2 = 0; a2 < 4; a2++)
                                {
                                    buf_ctmp1[table_5b4050[mtmp0 + 3] + 0x30 + a2] = buf_ctmp1[table_5b4050[mtmp0 + 0xF] - 3 + 3 - a2] * table_5b3ee0[3 - a2] - buf_ctmp1[table_5b4050[mtmp0 + 0x12] + a2] * table_5b3d60[3 - a2];
                                }

                                for (int a2 = 0; a2 < 4; a2++)
                                {
                                    buf_ctmp1[table_5b4050[mtmp0] + 0x34 + a2] = buf_ctmp1[table_5b4050[mtmp0 + 0x12] + 3 - a2] * table_5b3ee0[a2] + buf_ctmp1[table_5b4050[mtmp0 + 3] + 4 + a2] *  table_5b3d60[a2];

                                }
                                for (int a2 = 0; a2 < 4; a2++)
                                {
                                    buf_ctmp1[table_5b4050[mtmp0 + 3] + 0x34 + a2] = buf_ctmp1[table_5b4050[mtmp0 + 0xF] - 7 + 3 - a2] * table_5b3ed0[3 - a2] - buf_ctmp1[table_5b4050[mtmp0 + 0x12] + 4 + a2] * table_5b3d50[3 - a2];
                                }

                                var table_5b4050_mtmp0_0 = table_5b4050[mtmp0 + 0x0];
                                var table_5b4050_mtmp0_3 = table_5b4050[mtmp0 + 0x3];
                                var table_5b4050_mtmp0_6 = table_5b4050[mtmp0 + 0x6];
                                var table_5b4050_mtmp0_9 = table_5b4050[mtmp0 + 0x9];
                                var table_5b4050_mtmp0_c = table_5b4050[mtmp0 + 0xC];

                                fixed (float* table_6 = MaiAT3PlusCoreDecoder_StaticData.MAPCDSD_table_static_6)
                                fixed (float* buf_ctmp1_ptr = buf_ctmp1)
                                fixed (float* dst0_ptr = dst0)
                                {
                                    for (int a3 = 0; a3 < 10; a3++)
                                    {
                                        var a3_0x8 = a3 * 0x8;
                                        var a3_0x30 = a3 * 0x30;
                                        int a3_0x30_0x60 = 0x60 + a3_0x30;
                                        // @TODO: VERY SLOW
                                        for (int a2 = 0; a2 < 4; a2++)
                                        {
                                            buf_ctmp1_ptr[table_5b4050_mtmp0_0 + a3_0x30_0x60 + 0 + a2] = buf_ctmp1_ptr[table_5b4050_mtmp0_0 + 0x60 + 0 + 0 + a3_0x30 - 0x30 + a2] + table_6[0 + 0 + a3_0x8 + a2] * buf_ctmp1_ptr[table_5b4050_mtmp0_c + 0x29 + 4 + 3 + a3_0x30 - a2];
                                            buf_ctmp1_ptr[table_5b4050_mtmp0_3 + a3_0x30_0x60 + 0 + a2] = buf_ctmp1_ptr[table_5b4050_mtmp0_9 + 0x29 + 4 + 3 + a3_0x30 - 0x00 - a2] * table_6[3 + 4 + a3_0x8 - a2] - buf_ctmp1_ptr[table_5b4050_mtmp0_6 + 0x30 + 0 + 0 + a3_0x30 + a2];
                                            buf_ctmp1_ptr[table_5b4050_mtmp0_0 + a3_0x30_0x60 + 4 + a2] = buf_ctmp1_ptr[table_5b4050_mtmp0_0 + 0x60 + 0 + 0 + a3_0x30 - 0x2C + a2] + table_6[0 + 4 + a3_0x8 + a2] * buf_ctmp1_ptr[table_5b4050_mtmp0_c + 0x29 + 0 + 3 + a3_0x30 - a2];
                                            buf_ctmp1_ptr[table_5b4050_mtmp0_3 + a3_0x30_0x60 + 4 + a2] = buf_ctmp1_ptr[table_5b4050_mtmp0_9 + 0x29 + 0 + 3 + a3_0x30 - 0x00 - a2] * table_6[3 + 0 + a3_0x8 - a2] - buf_ctmp1_ptr[table_5b4050_mtmp0_6 + 0x30 + 0 + 4 + a3_0x30 + a2];
                                        }
                                    }

                                    // @TODO: SLOW
                                    for (int a2 = 0; a2 < 4; a2++)
                                    {
                                        dst0_ptr[a0 * 0x10 + 0x0 + a2] = buf_ctmp1_ptr[table_5b4050_mtmp0_c + 0x20D - 0 + 3 - a2] * table_6[0x50 + 0 + a2] + buf_ctmp1_ptr[table_5b4050_mtmp0_0 + 0x210 + 0 + a2];
                                        dst0_ptr[a0 * 0x10 + 0x8 + a2] = buf_ctmp1_ptr[table_5b4050_mtmp0_9 + 0x20D - 0 + 3 - a2] * table_6[0x54 + 3 - a2] - buf_ctmp1_ptr[table_5b4050_mtmp0_6 + 0x210 + 0 + a2];
                                        dst0_ptr[a0 * 0x10 + 0x4 + a2] = buf_ctmp1_ptr[table_5b4050_mtmp0_c + 0x20D - 4 + 3 - a2] * table_6[0x54 + 0 + a2] + buf_ctmp1_ptr[table_5b4050_mtmp0_0 + 0x210 + 4 + a2];
                                        dst0_ptr[a0 * 0x10 + 0xC + a2] = buf_ctmp1_ptr[table_5b4050_mtmp0_9 + 0x20D - 4 + 3 - a2] * table_6[0x50 + 3 - a2] - buf_ctmp1_ptr[table_5b4050_mtmp0_6 + 0x210 + 4 + a2];
                                    }
                                }
                            }
                        }
                    }
                }
            }

            c900--;
            if (0 == c900) c900 = 3;

            for (int a0 = 0; a0 < chns; a0++)
            {
                MaiAT3PlusCoreDecoderChnACCData ad0 = chn_info[a0].acc_data_now;
                chn_info[a0].acc_data_now = chn_info[a0].acc_data_old;
                chn_info[a0].acc_data_old = ad0;

                MaiAT3PlusCoreDecoderChnACCTable at0 = chn_info[a0].acc_table_now;
                chn_info[a0].acc_table_now = chn_info[a0].acc_table_old;
                chn_info[a0].acc_table_old = at0;
            }

            return rs;
        }
MaiAT3PlusCoreDecoder