Index: apps/codecs/libmad/D_odd.dat =================================================================== --- apps/codecs/libmad/D_odd.dat (revision 0) +++ apps/codecs/libmad/D_odd.dat (revision 0) @@ -0,0 +1,307 @@ +{ + -PRESHIFT(0x0001d000) /* -0.000442505 */, + -PRESHIFT(0x001cb000) /* -0.007003784 */, + -PRESHIFT(0x01421000) /* -0.078628540 */, + -PRESHIFT(0x09271000) /* -0.572036743 */, + PRESHIFT(0x09271000) /* 0.572036743 */, + PRESHIFT(0x01421000) /* 0.078628540 */, + PRESHIFT(0x001cb000) /* 0.007003784 */, + PRESHIFT(0x0001d000) /* 0.000442505 */, + -PRESHIFT(0x0001d000) /* -0.000442505 */, + -PRESHIFT(0x001cb000) /* -0.007003784 */, + -PRESHIFT(0x01421000) /* -0.078628540 */, + -PRESHIFT(0x09271000) /* -0.572036743 */, + PRESHIFT(0x09271000) /* 0.572036743 */, + PRESHIFT(0x01421000) /* 0.078628540 */, + PRESHIFT(0x001cb000) /* 0.007003784 */, + PRESHIFT(0x0001d000) /* 0.000442505 */ , +}, + { + -PRESHIFT(0x0001f000) /* -0.000473022 */, + -PRESHIFT(0x00207000) /* -0.007919312 */, + -PRESHIFT(0x0158d000) /* -0.084182739 */, + -PRESHIFT(0x099a8000) /* -0.600219727 */, + PRESHIFT(0x08b38000) /* 0.543823242 */, + PRESHIFT(0x012b4000) /* 0.073059082 */, + PRESHIFT(0x00191000) /* 0.006118774 */, + PRESHIFT(0x0001a000) /* 0.000396729 */, + -PRESHIFT(0x0001f000) /* -0.000473022 */, + -PRESHIFT(0x00207000) /* -0.007919312 */, + -PRESHIFT(0x0158d000) /* -0.084182739 */, + -PRESHIFT(0x099a8000) /* -0.600219727 */, + PRESHIFT(0x08b38000) /* 0.543823242 */, + PRESHIFT(0x012b4000) /* 0.073059082 */, + PRESHIFT(0x00191000) /* 0.006118774 */, + PRESHIFT(0x0001a000) /* 0.000396729 */ , +}, + { + -PRESHIFT(0x00023000) /* -0.000534058 */, + -PRESHIFT(0x00245000) /* -0.008865356 */, + -PRESHIFT(0x016f7000) /* -0.089706421 */, + -PRESHIFT(0x0a0d8000) /* -0.628295898 */, + PRESHIFT(0x083ff000) /* 0.515609741 */, + PRESHIFT(0x01149000) /* 0.067520142 */, + PRESHIFT(0x0015b000) /* 0.005294800 */, + PRESHIFT(0x00018000) /* 0.000366211 */, + -PRESHIFT(0x00023000) /* -0.000534058 */, + -PRESHIFT(0x00245000) /* -0.008865356 */, + -PRESHIFT(0x016f7000) /* -0.089706421 */, + -PRESHIFT(0x0a0d8000) /* -0.628295898 */, + PRESHIFT(0x083ff000) /* 0.515609741 */, + PRESHIFT(0x01149000) /* 0.067520142 */, + PRESHIFT(0x0015b000) /* 0.005294800 */, + PRESHIFT(0x00018000) /* 0.000366211 */ , +}, + { + -PRESHIFT(0x00026000) /* -0.000579834 */, + -PRESHIFT(0x00285000) /* -0.009841919 */, + -PRESHIFT(0x0185d000) /* -0.095169067 */, + -PRESHIFT(0x0a7fe000) /* -0.656219482 */, + PRESHIFT(0x07ccb000) /* 0.487472534 */, + PRESHIFT(0x00fdf000) /* 0.061996460 */, + PRESHIFT(0x00126000) /* 0.004486084 */, + PRESHIFT(0x00015000) /* 0.000320435 */, + -PRESHIFT(0x00026000) /* -0.000579834 */, + -PRESHIFT(0x00285000) /* -0.009841919 */, + -PRESHIFT(0x0185d000) /* -0.095169067 */, + -PRESHIFT(0x0a7fe000) /* -0.656219482 */, + PRESHIFT(0x07ccb000) /* 0.487472534 */, + PRESHIFT(0x00fdf000) /* 0.061996460 */, + PRESHIFT(0x00126000) /* 0.004486084 */, + PRESHIFT(0x00015000) /* 0.000320435 */ , +}, + { + -PRESHIFT(0x00029000) /* -0.000625610 */, + -PRESHIFT(0x002c7000) /* -0.010848999 */, + -PRESHIFT(0x019bd000) /* -0.100540161 */, + -PRESHIFT(0x0af15000) /* -0.683914185 */, + PRESHIFT(0x075a0000) /* 0.459472656 */, + PRESHIFT(0x00e79000) /* 0.056533813 */, + PRESHIFT(0x000f4000) /* 0.003723145 */, + PRESHIFT(0x00013000) /* 0.000289917 */, + -PRESHIFT(0x00029000) /* -0.000625610 */, + -PRESHIFT(0x002c7000) /* -0.010848999 */, + -PRESHIFT(0x019bd000) /* -0.100540161 */, + -PRESHIFT(0x0af15000) /* -0.683914185 */, + PRESHIFT(0x075a0000) /* 0.459472656 */, + PRESHIFT(0x00e79000) /* 0.056533813 */, + PRESHIFT(0x000f4000) /* 0.003723145 */, + PRESHIFT(0x00013000) /* 0.000289917 */ , +}, + { + -PRESHIFT(0x0002d000) /* -0.000686646 */, + -PRESHIFT(0x0030b000) /* -0.011886597 */, + -PRESHIFT(0x01b17000) /* -0.105819702 */, + -PRESHIFT(0x0b619000) /* -0.711318970 */, + PRESHIFT(0x06e81000) /* 0.431655884 */, + PRESHIFT(0x00d17000) /* 0.051132202 */, + PRESHIFT(0x000c5000) /* 0.003005981 */, + PRESHIFT(0x00011000) /* 0.000259399 */, + -PRESHIFT(0x0002d000) /* -0.000686646 */, + -PRESHIFT(0x0030b000) /* -0.011886597 */, + -PRESHIFT(0x01b17000) /* -0.105819702 */, + -PRESHIFT(0x0b619000) /* -0.711318970 */, + PRESHIFT(0x06e81000) /* 0.431655884 */, + PRESHIFT(0x00d17000) /* 0.051132202 */, + PRESHIFT(0x000c5000) /* 0.003005981 */, + PRESHIFT(0x00011000) /* 0.000259399 */ , +}, + { + -PRESHIFT(0x00031000) /* -0.000747681 */, + -PRESHIFT(0x00350000) /* -0.012939453 */, + -PRESHIFT(0x01c67000) /* -0.110946655 */, + -PRESHIFT(0x0bd06000) /* -0.738372803 */, + PRESHIFT(0x06772000) /* 0.404083252 */, + PRESHIFT(0x00bbc000) /* 0.045837402 */, + PRESHIFT(0x00099000) /* 0.002334595 */, + PRESHIFT(0x00010000) /* 0.000244141 */, + -PRESHIFT(0x00031000) /* -0.000747681 */, + -PRESHIFT(0x00350000) /* -0.012939453 */, + -PRESHIFT(0x01c67000) /* -0.110946655 */, + -PRESHIFT(0x0bd06000) /* -0.738372803 */, + PRESHIFT(0x06772000) /* 0.404083252 */, + PRESHIFT(0x00bbc000) /* 0.045837402 */, + PRESHIFT(0x00099000) /* 0.002334595 */, + PRESHIFT(0x00010000) /* 0.000244141 */ , +}, + { + -PRESHIFT(0x00035000) /* -0.000808716 */, + -PRESHIFT(0x00397000) /* -0.014022827 */, + -PRESHIFT(0x01dad000) /* -0.115921021 */, + -PRESHIFT(0x0c3d9000) /* -0.765029907 */, + PRESHIFT(0x06076000) /* 0.376800537 */, + PRESHIFT(0x00a67000) /* 0.040634155 */, + PRESHIFT(0x0006f000) /* 0.001693726 */, + PRESHIFT(0x0000e000) /* 0.000213623 */, + -PRESHIFT(0x00035000) /* -0.000808716 */, + -PRESHIFT(0x00397000) /* -0.014022827 */, + -PRESHIFT(0x01dad000) /* -0.115921021 */, + -PRESHIFT(0x0c3d9000) /* -0.765029907 */, + PRESHIFT(0x06076000) /* 0.376800537 */, + PRESHIFT(0x00a67000) /* 0.040634155 */, + PRESHIFT(0x0006f000) /* 0.001693726 */, + PRESHIFT(0x0000e000) /* 0.000213623 */ , +}, + { + -PRESHIFT(0x0003a000) /* -0.000885010 */, + -PRESHIFT(0x003df000) /* -0.015121460 */, + -PRESHIFT(0x01ee6000) /* -0.120697021 */, + -PRESHIFT(0x0ca8d000) /* -0.791213989 */, + PRESHIFT(0x05991000) /* 0.349868774 */, + PRESHIFT(0x0091a000) /* 0.035552979 */, + PRESHIFT(0x00048000) /* 0.001098633 */, + PRESHIFT(0x0000d000) /* 0.000198364 */, + -PRESHIFT(0x0003a000) /* -0.000885010 */, + -PRESHIFT(0x003df000) /* -0.015121460 */, + -PRESHIFT(0x01ee6000) /* -0.120697021 */, + -PRESHIFT(0x0ca8d000) /* -0.791213989 */, + PRESHIFT(0x05991000) /* 0.349868774 */, + PRESHIFT(0x0091a000) /* 0.035552979 */, + PRESHIFT(0x00048000) /* 0.001098633 */, + PRESHIFT(0x0000d000) /* 0.000198364 */ , +}, + { + -PRESHIFT(0x0003f000) /* -0.000961304 */, + -PRESHIFT(0x00428000) /* -0.016235352 */, + -PRESHIFT(0x02011000) /* -0.125259399 */, + -PRESHIFT(0x0d11e000) /* -0.816864014 */, + PRESHIFT(0x052c5000) /* 0.323318481 */, + PRESHIFT(0x007d6000) /* 0.030609131 */, + PRESHIFT(0x00024000) /* 0.000549316 */, + PRESHIFT(0x0000b000) /* 0.000167847 */, + -PRESHIFT(0x0003f000) /* -0.000961304 */, + -PRESHIFT(0x00428000) /* -0.016235352 */, + -PRESHIFT(0x02011000) /* -0.125259399 */, + -PRESHIFT(0x0d11e000) /* -0.816864014 */, + PRESHIFT(0x052c5000) /* 0.323318481 */, + PRESHIFT(0x007d6000) /* 0.030609131 */, + PRESHIFT(0x00024000) /* 0.000549316 */, + PRESHIFT(0x0000b000) /* 0.000167847 */ , +}, + { + -PRESHIFT(0x00044000) /* -0.001037598 */, + -PRESHIFT(0x00471000) /* -0.017349243 */, + -PRESHIFT(0x0212b000) /* -0.129562378 */, + -PRESHIFT(0x0d78a000) /* -0.841949463 */, + PRESHIFT(0x04c16000) /* 0.297210693 */, + PRESHIFT(0x0069c000) /* 0.025817871 */, + PRESHIFT(0x00002000) /* 0.000030518 */, + PRESHIFT(0x0000a000) /* 0.000152588 */, + -PRESHIFT(0x00044000) /* -0.001037598 */, + -PRESHIFT(0x00471000) /* -0.017349243 */, + -PRESHIFT(0x0212b000) /* -0.129562378 */, + -PRESHIFT(0x0d78a000) /* -0.841949463 */, + PRESHIFT(0x04c16000) /* 0.297210693 */, + PRESHIFT(0x0069c000) /* 0.025817871 */, + PRESHIFT(0x00002000) /* 0.000030518 */, + PRESHIFT(0x0000a000) /* 0.000152588 */ , +}, + { + -PRESHIFT(0x00049000) /* -0.001113892 */, + -PRESHIFT(0x004ba000) /* -0.018463135 */, + -PRESHIFT(0x02233000) /* -0.133590698 */, + -PRESHIFT(0x0ddca000) /* -0.866363525 */, + PRESHIFT(0x04587000) /* 0.271591187 */, + PRESHIFT(0x0056c000) /* 0.021179199 */, + -PRESHIFT(0x0001d000) /* -0.000442505 */, + PRESHIFT(0x00009000) /* 0.000137329 */, + -PRESHIFT(0x00049000) /* -0.001113892 */, + -PRESHIFT(0x004ba000) /* -0.018463135 */, + -PRESHIFT(0x02233000) /* -0.133590698 */, + -PRESHIFT(0x0ddca000) /* -0.866363525 */, + PRESHIFT(0x04587000) /* 0.271591187 */, + PRESHIFT(0x0056c000) /* 0.021179199 */, + -PRESHIFT(0x0001d000) /* -0.000442505 */, + PRESHIFT(0x00009000) /* 0.000137329 */ , +}, + { + -PRESHIFT(0x0004f000) /* -0.001205444 */, + -PRESHIFT(0x00503000) /* -0.019577026 */, + -PRESHIFT(0x02326000) /* -0.137298584 */, + -PRESHIFT(0x0e3dd000) /* -0.890090942 */, + PRESHIFT(0x03f1b000) /* 0.246505737 */, + PRESHIFT(0x00447000) /* 0.016708374 */, + -PRESHIFT(0x00039000) /* -0.000869751 */, + PRESHIFT(0x00008000) /* 0.000122070 */, + -PRESHIFT(0x0004f000) /* -0.001205444 */, + -PRESHIFT(0x00503000) /* -0.019577026 */, + -PRESHIFT(0x02326000) /* -0.137298584 */, + -PRESHIFT(0x0e3dd000) /* -0.890090942 */, + PRESHIFT(0x03f1b000) /* 0.246505737 */, + PRESHIFT(0x00447000) /* 0.016708374 */, + -PRESHIFT(0x00039000) /* -0.000869751 */, + PRESHIFT(0x00008000) /* 0.000122070 */ , +}, + { + -PRESHIFT(0x00055000) /* -0.001296997 */, + -PRESHIFT(0x0054c000) /* -0.020690918 */, + -PRESHIFT(0x02403000) /* -0.140670776 */, + -PRESHIFT(0x0e9be000) /* -0.913055420 */, + PRESHIFT(0x038d4000) /* 0.221984863 */, + PRESHIFT(0x0032e000) /* 0.012420654 */, + -PRESHIFT(0x00053000) /* -0.001266479 */, + PRESHIFT(0x00007000) /* 0.000106812 */, + -PRESHIFT(0x00055000) /* -0.001296997 */, + -PRESHIFT(0x0054c000) /* -0.020690918 */, + -PRESHIFT(0x02403000) /* -0.140670776 */, + -PRESHIFT(0x0e9be000) /* -0.913055420 */, + PRESHIFT(0x038d4000) /* 0.221984863 */, + PRESHIFT(0x0032e000) /* 0.012420654 */, + -PRESHIFT(0x00053000) /* -0.001266479 */, + PRESHIFT(0x00007000) /* 0.000106812 */ , +}, + { + -PRESHIFT(0x0005b000) /* -0.001388550 */, + -PRESHIFT(0x00594000) /* -0.021789551 */, + -PRESHIFT(0x024c8000) /* -0.143676758 */, + -PRESHIFT(0x0ef69000) /* -0.935195923 */, + PRESHIFT(0x032b4000) /* 0.198059082 */, + PRESHIFT(0x00221000) /* 0.008316040 */, + -PRESHIFT(0x0006a000) /* -0.001617432 */, + PRESHIFT(0x00007000) /* 0.000106812 */, + -PRESHIFT(0x0005b000) /* -0.001388550 */, + -PRESHIFT(0x00594000) /* -0.021789551 */, + -PRESHIFT(0x024c8000) /* -0.143676758 */, + -PRESHIFT(0x0ef69000) /* -0.935195923 */, + PRESHIFT(0x032b4000) /* 0.198059082 */, + PRESHIFT(0x00221000) /* 0.008316040 */, + -PRESHIFT(0x0006a000) /* -0.001617432 */, + PRESHIFT(0x00007000) /* 0.000106812 */ , +}, + { + -PRESHIFT(0x00061000) /* -0.001480103 */, + -PRESHIFT(0x005da000) /* -0.022857666 */, + -PRESHIFT(0x02571000) /* -0.146255493 */, + -PRESHIFT(0x0f4dc000) /* -0.956481934 */, + PRESHIFT(0x02cbf000) /* 0.174789429 */, + PRESHIFT(0x00120000) /* 0.004394531 */, + -PRESHIFT(0x0007f000) /* -0.001937866 */, + PRESHIFT(0x00006000) /* 0.000091553 */, + -PRESHIFT(0x00061000) /* -0.001480103 */, + -PRESHIFT(0x005da000) /* -0.022857666 */, + -PRESHIFT(0x02571000) /* -0.146255493 */, + -PRESHIFT(0x0f4dc000) /* -0.956481934 */, + PRESHIFT(0x02cbf000) /* 0.174789429 */, + PRESHIFT(0x00120000) /* 0.004394531 */, + -PRESHIFT(0x0007f000) /* -0.001937866 */, + PRESHIFT(0x00006000) /* 0.000091553 */ , +}, + { + -PRESHIFT(0x00068000) /* -0.001586914 */, + -PRESHIFT(0x0061f000) /* -0.023910522 */, + -PRESHIFT(0x025ff000) /* -0.148422241 */, + -PRESHIFT(0x0fa13000) /* -0.976852417 */, + PRESHIFT(0x026f7000) /* 0.152206421 */, + PRESHIFT(0x0002d000) /* 0.000686646 */, + -PRESHIFT(0x00092000) /* -0.002227783 */, + PRESHIFT(0x00005000) /* 0.000076294 */, + -PRESHIFT(0x00068000) /* -0.001586914 */, + -PRESHIFT(0x0061f000) /* -0.023910522 */, + -PRESHIFT(0x025ff000) /* -0.148422241 */, + -PRESHIFT(0x0fa13000) /* -0.976852417 */, + PRESHIFT(0x026f7000) /* 0.152206421 */, + PRESHIFT(0x0002d000) /* 0.000686646 */, + -PRESHIFT(0x00092000) /* -0.002227783 */, + PRESHIFT(0x00005000) /* 0.000076294 */ +}, + \ No newline at end of file Index: apps/codecs/libmad/D_sort.dat =================================================================== --- apps/codecs/libmad/D_sort.dat (revision 0) +++ apps/codecs/libmad/D_sort.dat (revision 0) @@ -0,0 +1,592 @@ + /* + * libmad - MPEG audio decoder library + * Copyright (C) 2000-2004 Underbit Technologies, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id: D.dat 25785 2010-05-02 19:16:47Z Buschel $ + */ + +/* + * These are the coefficients for the subband synthesis window. This is a + * reordered version of Table B.3 from ISO/IEC 11172-3. + * + * Every value is parameterized so that shift optimizations can be made at + * compile-time. For example, every value can be right-shifted 12 bits to + * minimize multiply instruction times without any loss of accuracy. + */ + + { PRESHIFT(0x00000000) /* 0.000000000 */, /* 0 */ + PRESHIFT(0x000d5000) /* 0.003250122 */, + -PRESHIFT(0x0001d000) /* -0.000442505 */, + -PRESHIFT(0x001cb000) /* -0.007003784 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + PRESHIFT(0x019ae000) /* 0.100311279 */, + -PRESHIFT(0x01421000) /* -0.078628540 */, + -PRESHIFT(0x09271000) /* -0.572036743 */, + PRESHIFT(0x1251e000) /* 1.144989014 */, + PRESHIFT(0x019ae000) /* 0.100311279 */, + PRESHIFT(0x09271000) /* 0.572036743 */, + PRESHIFT(0x01421000) /* 0.078628540 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + PRESHIFT(0x000d5000) /* 0.003250122 */, + PRESHIFT(0x001cb000) /* 0.007003784 */, + PRESHIFT(0x0001d000) /* 0.000442505 */, + PRESHIFT(0x00000000) /* 0.000000000 */, + PRESHIFT(0x000d5000) /* 0.003250122 */, + -PRESHIFT(0x0001d000) /* -0.000442505 */, + -PRESHIFT(0x001cb000) /* -0.007003784 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + PRESHIFT(0x019ae000) /* 0.100311279 */, + -PRESHIFT(0x01421000) /* -0.078628540 */, + -PRESHIFT(0x09271000) /* -0.572036743 */, + PRESHIFT(0x1251e000) /* 1.144989014 */, + PRESHIFT(0x019ae000) /* 0.100311279 */, + PRESHIFT(0x09271000) /* 0.572036743 */, + PRESHIFT(0x01421000) /* 0.078628540 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + PRESHIFT(0x000d5000) /* 0.003250122 */, + PRESHIFT(0x001cb000) /* 0.007003784 */, + PRESHIFT(0x0001d000) /* 0.000442505 */ }, + + { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 1 */ + PRESHIFT(0x000da000) /* 0.003326416 */, + -PRESHIFT(0x0001f000) /* -0.000473022 */, + -PRESHIFT(0x00207000) /* -0.007919312 */, + PRESHIFT(0x007d0000) /* 0.030517578 */, + PRESHIFT(0x01747000) /* 0.090927124 */, + -PRESHIFT(0x0158d000) /* -0.084182739 */, + -PRESHIFT(0x099a8000) /* -0.600219727 */, + PRESHIFT(0x124f0000) /* 1.144287109 */, + PRESHIFT(0x01bde000) /* 0.108856201 */, + PRESHIFT(0x08b38000) /* 0.543823242 */, + PRESHIFT(0x012b4000) /* 0.073059082 */, + PRESHIFT(0x0080f000) /* 0.031478882 */, + PRESHIFT(0x000d0000) /* 0.003173828 */, + PRESHIFT(0x00191000) /* 0.006118774 */, + PRESHIFT(0x0001a000) /* 0.000396729 */, + + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000da000) /* 0.003326416 */, + -PRESHIFT(0x0001f000) /* -0.000473022 */, + -PRESHIFT(0x00207000) /* -0.007919312 */, + PRESHIFT(0x007d0000) /* 0.030517578 */, + PRESHIFT(0x01747000) /* 0.090927124 */, + -PRESHIFT(0x0158d000) /* -0.084182739 */, + -PRESHIFT(0x099a8000) /* -0.600219727 */, + PRESHIFT(0x124f0000) /* 1.144287109 */, + PRESHIFT(0x01bde000) /* 0.108856201 */, + PRESHIFT(0x08b38000) /* 0.543823242 */, + PRESHIFT(0x012b4000) /* 0.073059082 */, + PRESHIFT(0x0080f000) /* 0.031478882 */, + PRESHIFT(0x000d0000) /* 0.003173828 */, + PRESHIFT(0x00191000) /* 0.006118774 */, + PRESHIFT(0x0001a000) /* 0.000396729 */ }, + + { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 2 */ + PRESHIFT(0x000de000) /* 0.003387451 */, + -PRESHIFT(0x00023000) /* -0.000534058 */, + -PRESHIFT(0x00245000) /* -0.008865356 */, + PRESHIFT(0x007a0000) /* 0.029785156 */, + PRESHIFT(0x014a8000) /* 0.080688477 */, + -PRESHIFT(0x016f7000) /* -0.089706421 */, + -PRESHIFT(0x0a0d8000) /* -0.628295898 */, + PRESHIFT(0x12468000) /* 1.142211914 */, + PRESHIFT(0x01dd8000) /* 0.116577148 */, + PRESHIFT(0x083ff000) /* 0.515609741 */, + PRESHIFT(0x01149000) /* 0.067520142 */, + PRESHIFT(0x00820000) /* 0.031738281 */, + PRESHIFT(0x000ca000) /* 0.003082275 */, + PRESHIFT(0x0015b000) /* 0.005294800 */, + PRESHIFT(0x00018000) /* 0.000366211 */, + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000de000) /* 0.003387451 */, + -PRESHIFT(0x00023000) /* -0.000534058 */, + -PRESHIFT(0x00245000) /* -0.008865356 */, + PRESHIFT(0x007a0000) /* 0.029785156 */, + PRESHIFT(0x014a8000) /* 0.080688477 */, + -PRESHIFT(0x016f7000) /* -0.089706421 */, + -PRESHIFT(0x0a0d8000) /* -0.628295898 */, + PRESHIFT(0x12468000) /* 1.142211914 */, + PRESHIFT(0x01dd8000) /* 0.116577148 */, + PRESHIFT(0x083ff000) /* 0.515609741 */, + PRESHIFT(0x01149000) /* 0.067520142 */, + PRESHIFT(0x00820000) /* 0.031738281 */, + PRESHIFT(0x000ca000) /* 0.003082275 */, + PRESHIFT(0x0015b000) /* 0.005294800 */, + PRESHIFT(0x00018000) /* 0.000366211 */ }, + + { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 3 */ + PRESHIFT(0x000e1000) /* 0.003433228 */, + -PRESHIFT(0x00026000) /* -0.000579834 */, + -PRESHIFT(0x00285000) /* -0.009841919 */, + PRESHIFT(0x00765000) /* 0.028884888 */, + PRESHIFT(0x011d1000) /* 0.069595337 */, + -PRESHIFT(0x0185d000) /* -0.095169067 */, + -PRESHIFT(0x0a7fe000) /* -0.656219482 */, + PRESHIFT(0x12386000) /* 1.138763428 */, + PRESHIFT(0x01f9c000) /* 0.123474121 */, + PRESHIFT(0x07ccb000) /* 0.487472534 */, + PRESHIFT(0x00fdf000) /* 0.061996460 */, + PRESHIFT(0x00827000) /* 0.031845093 */, + PRESHIFT(0x000c4000) /* 0.002990723 */, + PRESHIFT(0x00126000) /* 0.004486084 */, + PRESHIFT(0x00015000) /* 0.000320435 */, + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000e1000) /* 0.003433228 */, + -PRESHIFT(0x00026000) /* -0.000579834 */, + -PRESHIFT(0x00285000) /* -0.009841919 */, + PRESHIFT(0x00765000) /* 0.028884888 */, + PRESHIFT(0x011d1000) /* 0.069595337 */, + -PRESHIFT(0x0185d000) /* -0.095169067 */, + -PRESHIFT(0x0a7fe000) /* -0.656219482 */, + PRESHIFT(0x12386000) /* 1.138763428 */, + PRESHIFT(0x01f9c000) /* 0.123474121 */, + PRESHIFT(0x07ccb000) /* 0.487472534 */, + PRESHIFT(0x00fdf000) /* 0.061996460 */, + PRESHIFT(0x00827000) /* 0.031845093 */, + PRESHIFT(0x000c4000) /* 0.002990723 */, + PRESHIFT(0x00126000) /* 0.004486084 */, + PRESHIFT(0x00015000) /* 0.000320435 */ }, + + { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 4 */ + PRESHIFT(0x000e3000) /* 0.003463745 */, + -PRESHIFT(0x00029000) /* -0.000625610 */, + -PRESHIFT(0x002c7000) /* -0.010848999 */, + PRESHIFT(0x0071e000) /* 0.027801514 */, + PRESHIFT(0x00ec0000) /* 0.057617187 */, + -PRESHIFT(0x019bd000) /* -0.100540161 */, + -PRESHIFT(0x0af15000) /* -0.683914185 */, + PRESHIFT(0x12249000) /* 1.133926392 */, + PRESHIFT(0x0212c000) /* 0.129577637 */, + PRESHIFT(0x075a0000) /* 0.459472656 */, + PRESHIFT(0x00e79000) /* 0.056533813 */, + PRESHIFT(0x00825000) /* 0.031814575 */, + PRESHIFT(0x000be000) /* 0.002899170 */, + PRESHIFT(0x000f4000) /* 0.003723145 */, + PRESHIFT(0x00013000) /* 0.000289917 */, + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000e3000) /* 0.003463745 */, + -PRESHIFT(0x00029000) /* -0.000625610 */, + -PRESHIFT(0x002c7000) /* -0.010848999 */, + PRESHIFT(0x0071e000) /* 0.027801514 */, + PRESHIFT(0x00ec0000) /* 0.057617187 */, + -PRESHIFT(0x019bd000) /* -0.100540161 */, + -PRESHIFT(0x0af15000) /* -0.683914185 */, + PRESHIFT(0x12249000) /* 1.133926392 */, + PRESHIFT(0x0212c000) /* 0.129577637 */, + PRESHIFT(0x075a0000) /* 0.459472656 */, + PRESHIFT(0x00e79000) /* 0.056533813 */, + PRESHIFT(0x00825000) /* 0.031814575 */, + PRESHIFT(0x000be000) /* 0.002899170 */, + PRESHIFT(0x000f4000) /* 0.003723145 */, + PRESHIFT(0x00013000) /* 0.000289917 */ }, + + { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 5 */ + PRESHIFT(0x000e4000) /* 0.003479004 */, + -PRESHIFT(0x0002d000) /* -0.000686646 */, + -PRESHIFT(0x0030b000) /* -0.011886597 */, + PRESHIFT(0x006cb000) /* 0.026535034 */, + PRESHIFT(0x00b77000) /* 0.044784546 */, + -PRESHIFT(0x01b17000) /* -0.105819702 */, + -PRESHIFT(0x0b619000) /* -0.711318970 */, + PRESHIFT(0x120b4000) /* 1.127746582 */, + PRESHIFT(0x02288000) /* 0.134887695 */, + PRESHIFT(0x06e81000) /* 0.431655884 */, + PRESHIFT(0x00d17000) /* 0.051132202 */, + PRESHIFT(0x0081b000) /* 0.031661987 */, + PRESHIFT(0x000b7000) /* 0.002792358 */, + PRESHIFT(0x000c5000) /* 0.003005981 */, + PRESHIFT(0x00011000) /* 0.000259399 */, + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000e4000) /* 0.003479004 */, + -PRESHIFT(0x0002d000) /* -0.000686646 */, + -PRESHIFT(0x0030b000) /* -0.011886597 */, + PRESHIFT(0x006cb000) /* 0.026535034 */, + PRESHIFT(0x00b77000) /* 0.044784546 */, + -PRESHIFT(0x01b17000) /* -0.105819702 */, + -PRESHIFT(0x0b619000) /* -0.711318970 */, + PRESHIFT(0x120b4000) /* 1.127746582 */, + PRESHIFT(0x02288000) /* 0.134887695 */, + PRESHIFT(0x06e81000) /* 0.431655884 */, + PRESHIFT(0x00d17000) /* 0.051132202 */, + PRESHIFT(0x0081b000) /* 0.031661987 */, + PRESHIFT(0x000b7000) /* 0.002792358 */, + PRESHIFT(0x000c5000) /* 0.003005981 */, + PRESHIFT(0x00011000) /* 0.000259399 */ }, + + { -PRESHIFT(0x00001000) /* -0.000015259 */, /* 6 */ + PRESHIFT(0x000e4000) /* 0.003479004 */, + -PRESHIFT(0x00031000) /* -0.000747681 */, + -PRESHIFT(0x00350000) /* -0.012939453 */, + PRESHIFT(0x0066c000) /* 0.025085449 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + -PRESHIFT(0x01c67000) /* -0.110946655 */, + -PRESHIFT(0x0bd06000) /* -0.738372803 */, + PRESHIFT(0x11ec7000) /* 1.120223999 */, + PRESHIFT(0x023b3000) /* 0.139450073 */, + PRESHIFT(0x06772000) /* 0.404083252 */, + PRESHIFT(0x00bbc000) /* 0.045837402 */, + PRESHIFT(0x00809000) /* 0.031387329 */, + PRESHIFT(0x000b0000) /* 0.002685547 */, + PRESHIFT(0x00099000) /* 0.002334595 */, + PRESHIFT(0x00010000) /* 0.000244141 */, + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000e4000) /* 0.003479004 */, + -PRESHIFT(0x00031000) /* -0.000747681 */, + -PRESHIFT(0x00350000) /* -0.012939453 */, + PRESHIFT(0x0066c000) /* 0.025085449 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + -PRESHIFT(0x01c67000) /* -0.110946655 */, + -PRESHIFT(0x0bd06000) /* -0.738372803 */, + PRESHIFT(0x11ec7000) /* 1.120223999 */, + PRESHIFT(0x023b3000) /* 0.139450073 */, + PRESHIFT(0x06772000) /* 0.404083252 */, + PRESHIFT(0x00bbc000) /* 0.045837402 */, + PRESHIFT(0x00809000) /* 0.031387329 */, + PRESHIFT(0x000b0000) /* 0.002685547 */, + PRESHIFT(0x00099000) /* 0.002334595 */, + PRESHIFT(0x00010000) /* 0.000244141 */ }, + + { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 7 */ + PRESHIFT(0x000e3000) /* 0.003463745 */, + -PRESHIFT(0x00035000) /* -0.000808716 */, + -PRESHIFT(0x00397000) /* -0.014022827 */, + PRESHIFT(0x005ff000) /* 0.023422241 */, + PRESHIFT(0x0043a000) /* 0.016510010 */, + -PRESHIFT(0x01dad000) /* -0.115921021 */, + -PRESHIFT(0x0c3d9000) /* -0.765029907 */, + PRESHIFT(0x11c83000) /* 1.111373901 */, + PRESHIFT(0x024ad000) /* 0.143264771 */, + PRESHIFT(0x06076000) /* 0.376800537 */, + PRESHIFT(0x00a67000) /* 0.040634155 */, + PRESHIFT(0x007f0000) /* 0.031005859 */, + PRESHIFT(0x000a9000) /* 0.002578735 */, + PRESHIFT(0x0006f000) /* 0.001693726 */, + PRESHIFT(0x0000e000) /* 0.000213623 */, + -PRESHIFT(0x00002000) /* -0.000030518 */, + PRESHIFT(0x000e3000) /* 0.003463745 */, + -PRESHIFT(0x00035000) /* -0.000808716 */, + -PRESHIFT(0x00397000) /* -0.014022827 */, + PRESHIFT(0x005ff000) /* 0.023422241 */, + PRESHIFT(0x0043a000) /* 0.016510010 */, + -PRESHIFT(0x01dad000) /* -0.115921021 */, + -PRESHIFT(0x0c3d9000) /* -0.765029907 */, + PRESHIFT(0x11c83000) /* 1.111373901 */, + PRESHIFT(0x024ad000) /* 0.143264771 */, + PRESHIFT(0x06076000) /* 0.376800537 */, + PRESHIFT(0x00a67000) /* 0.040634155 */, + PRESHIFT(0x007f0000) /* 0.031005859 */, + PRESHIFT(0x000a9000) /* 0.002578735 */, + PRESHIFT(0x0006f000) /* 0.001693726 */, + PRESHIFT(0x0000e000) /* 0.000213623 */ }, + + { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 8 */ + PRESHIFT(0x000e0000) /* 0.003417969 */, + -PRESHIFT(0x0003a000) /* -0.000885010 */, + -PRESHIFT(0x003df000) /* -0.015121460 */, + PRESHIFT(0x00586000) /* 0.021575928 */, + PRESHIFT(0x00046000) /* 0.001068115 */, + -PRESHIFT(0x01ee6000) /* -0.120697021 */, + -PRESHIFT(0x0ca8d000) /* -0.791213989 */, + PRESHIFT(0x119e9000) /* 1.101211548 */, + PRESHIFT(0x02578000) /* 0.146362305 */, + PRESHIFT(0x05991000) /* 0.349868774 */, + PRESHIFT(0x0091a000) /* 0.035552979 */, + PRESHIFT(0x007d1000) /* 0.030532837 */, + PRESHIFT(0x000a1000) /* 0.002456665 */, + PRESHIFT(0x00048000) /* 0.001098633 */, + PRESHIFT(0x0000d000) /* 0.000198364 */, + -PRESHIFT(0x00002000) /* -0.000030518 */, + PRESHIFT(0x000e0000) /* 0.003417969 */, + -PRESHIFT(0x0003a000) /* -0.000885010 */, + -PRESHIFT(0x003df000) /* -0.015121460 */, + PRESHIFT(0x00586000) /* 0.021575928 */, + PRESHIFT(0x00046000) /* 0.001068115 */, + -PRESHIFT(0x01ee6000) /* -0.120697021 */, + -PRESHIFT(0x0ca8d000) /* -0.791213989 */, + PRESHIFT(0x119e9000) /* 1.101211548 */, + PRESHIFT(0x02578000) /* 0.146362305 */, + PRESHIFT(0x05991000) /* 0.349868774 */, + PRESHIFT(0x0091a000) /* 0.035552979 */, + PRESHIFT(0x007d1000) /* 0.030532837 */, + PRESHIFT(0x000a1000) /* 0.002456665 */, + PRESHIFT(0x00048000) /* 0.001098633 */, + PRESHIFT(0x0000d000) /* 0.000198364 */ }, + + { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 9 */ + PRESHIFT(0x000dd000) /* 0.003372192 */, + -PRESHIFT(0x0003f000) /* -0.000961304 */, + -PRESHIFT(0x00428000) /* -0.016235352 */, + PRESHIFT(0x00500000) /* 0.019531250 */, + -PRESHIFT(0x003e6000) /* -0.015228271 */, + -PRESHIFT(0x02011000) /* -0.125259399 */, + -PRESHIFT(0x0d11e000) /* -0.816864014 */, + PRESHIFT(0x116fc000) /* 1.089782715 */, + PRESHIFT(0x02616000) /* 0.148773193 */, + PRESHIFT(0x052c5000) /* 0.323318481 */, + PRESHIFT(0x007d6000) /* 0.030609131 */, + PRESHIFT(0x007aa000) /* 0.029937744 */, + PRESHIFT(0x0009a000) /* 0.002349854 */, + PRESHIFT(0x00024000) /* 0.000549316 */, + PRESHIFT(0x0000b000) /* 0.000167847 */, + -PRESHIFT(0x00002000) /* -0.000030518 */, + PRESHIFT(0x000dd000) /* 0.003372192 */, + -PRESHIFT(0x0003f000) /* -0.000961304 */, + -PRESHIFT(0x00428000) /* -0.016235352 */, + PRESHIFT(0x00500000) /* 0.019531250 */, + -PRESHIFT(0x003e6000) /* -0.015228271 */, + -PRESHIFT(0x02011000) /* -0.125259399 */, + -PRESHIFT(0x0d11e000) /* -0.816864014 */, + PRESHIFT(0x116fc000) /* 1.089782715 */, + PRESHIFT(0x02616000) /* 0.148773193 */, + PRESHIFT(0x052c5000) /* 0.323318481 */, + PRESHIFT(0x007d6000) /* 0.030609131 */, + PRESHIFT(0x007aa000) /* 0.029937744 */, + PRESHIFT(0x0009a000) /* 0.002349854 */, + PRESHIFT(0x00024000) /* 0.000549316 */, + PRESHIFT(0x0000b000) /* 0.000167847 */ }, + + { -PRESHIFT(0x00002000) /* -0.000030518 */, /* 10 */ + PRESHIFT(0x000d7000) /* 0.003280640 */, + -PRESHIFT(0x00044000) /* -0.001037598 */, + -PRESHIFT(0x00471000) /* -0.017349243 */, + PRESHIFT(0x0046b000) /* 0.017257690 */, + -PRESHIFT(0x0084a000) /* -0.032379150 */, + -PRESHIFT(0x0212b000) /* -0.129562378 */, + -PRESHIFT(0x0d78a000) /* -0.841949463 */, + PRESHIFT(0x113be000) /* 1.077117920 */, + PRESHIFT(0x02687000) /* 0.150497437 */, + PRESHIFT(0x04c16000) /* 0.297210693 */, + PRESHIFT(0x0069c000) /* 0.025817871 */, + PRESHIFT(0x0077f000) /* 0.029281616 */, + PRESHIFT(0x00093000) /* 0.002243042 */, + PRESHIFT(0x00002000) /* 0.000030518 */, + PRESHIFT(0x0000a000) /* 0.000152588 */, + -PRESHIFT(0x00002000) /* -0.000030518 */, + PRESHIFT(0x000d7000) /* 0.003280640 */, + -PRESHIFT(0x00044000) /* -0.001037598 */, + -PRESHIFT(0x00471000) /* -0.017349243 */, + PRESHIFT(0x0046b000) /* 0.017257690 */, + -PRESHIFT(0x0084a000) /* -0.032379150 */, + -PRESHIFT(0x0212b000) /* -0.129562378 */, + -PRESHIFT(0x0d78a000) /* -0.841949463 */, + PRESHIFT(0x113be000) /* 1.077117920 */, + PRESHIFT(0x02687000) /* 0.150497437 */, + PRESHIFT(0x04c16000) /* 0.297210693 */, + PRESHIFT(0x0069c000) /* 0.025817871 */, + PRESHIFT(0x0077f000) /* 0.029281616 */, + PRESHIFT(0x00093000) /* 0.002243042 */, + PRESHIFT(0x00002000) /* 0.000030518 */, + PRESHIFT(0x0000a000) /* 0.000152588 */ }, + + { -PRESHIFT(0x00003000) /* -0.000045776 */, /* 11 */ + PRESHIFT(0x000d0000) /* 0.003173828 */, + -PRESHIFT(0x00049000) /* -0.001113892 */, + -PRESHIFT(0x004ba000) /* -0.018463135 */, + PRESHIFT(0x003ca000) /* 0.014801025 */, + -PRESHIFT(0x00ce4000) /* -0.050354004 */, + -PRESHIFT(0x02233000) /* -0.133590698 */, + -PRESHIFT(0x0ddca000) /* -0.866363525 */, + PRESHIFT(0x1102f000) /* 1.063217163 */, + PRESHIFT(0x026cf000) /* 0.151596069 */, + PRESHIFT(0x04587000) /* 0.271591187 */, + PRESHIFT(0x0056c000) /* 0.021179199 */, + PRESHIFT(0x0074e000) /* 0.028533936 */, + PRESHIFT(0x0008b000) /* 0.002120972 */, + -PRESHIFT(0x0001d000) /* -0.000442505 */, + PRESHIFT(0x00009000) /* 0.000137329 */, + -PRESHIFT(0x00003000) /* -0.000045776 */, + PRESHIFT(0x000d0000) /* 0.003173828 */, + -PRESHIFT(0x00049000) /* -0.001113892 */, + -PRESHIFT(0x004ba000) /* -0.018463135 */, + PRESHIFT(0x003ca000) /* 0.014801025 */, + -PRESHIFT(0x00ce4000) /* -0.050354004 */, + -PRESHIFT(0x02233000) /* -0.133590698 */, + -PRESHIFT(0x0ddca000) /* -0.866363525 */, + PRESHIFT(0x1102f000) /* 1.063217163 */, + PRESHIFT(0x026cf000) /* 0.151596069 */, + PRESHIFT(0x04587000) /* 0.271591187 */, + PRESHIFT(0x0056c000) /* 0.021179199 */, + PRESHIFT(0x0074e000) /* 0.028533936 */, + PRESHIFT(0x0008b000) /* 0.002120972 */, + -PRESHIFT(0x0001d000) /* -0.000442505 */, + PRESHIFT(0x00009000) /* 0.000137329 */ }, + + { -PRESHIFT(0x00003000) /* -0.000045776 */, /* 12 */ + PRESHIFT(0x000c8000) /* 0.003051758 */, + -PRESHIFT(0x0004f000) /* -0.001205444 */, + -PRESHIFT(0x00503000) /* -0.019577026 */, + PRESHIFT(0x0031a000) /* 0.012115479 */, + -PRESHIFT(0x011b5000) /* -0.069168091 */, + -PRESHIFT(0x02326000) /* -0.137298584 */, + -PRESHIFT(0x0e3dd000) /* -0.890090942 */, + PRESHIFT(0x10c54000) /* 1.048156738 */, + PRESHIFT(0x026ee000) /* 0.152069092 */, + PRESHIFT(0x03f1b000) /* 0.246505737 */, + PRESHIFT(0x00447000) /* 0.016708374 */, + PRESHIFT(0x00719000) /* 0.027725220 */, + PRESHIFT(0x00084000) /* 0.002014160 */, + -PRESHIFT(0x00039000) /* -0.000869751 */, + PRESHIFT(0x00008000) /* 0.000122070 */, + -PRESHIFT(0x00003000) /* -0.000045776 */, + PRESHIFT(0x000c8000) /* 0.003051758 */, + -PRESHIFT(0x0004f000) /* -0.001205444 */, + -PRESHIFT(0x00503000) /* -0.019577026 */, + PRESHIFT(0x0031a000) /* 0.012115479 */, + -PRESHIFT(0x011b5000) /* -0.069168091 */, + -PRESHIFT(0x02326000) /* -0.137298584 */, + -PRESHIFT(0x0e3dd000) /* -0.890090942 */, + PRESHIFT(0x10c54000) /* 1.048156738 */, + PRESHIFT(0x026ee000) /* 0.152069092 */, + PRESHIFT(0x03f1b000) /* 0.246505737 */, + PRESHIFT(0x00447000) /* 0.016708374 */, + PRESHIFT(0x00719000) /* 0.027725220 */, + PRESHIFT(0x00084000) /* 0.002014160 */, + -PRESHIFT(0x00039000) /* -0.000869751 */, + PRESHIFT(0x00008000) /* 0.000122070 */ }, + + { -PRESHIFT(0x00004000) /* -0.000061035 */, /* 13 */ + PRESHIFT(0x000bd000) /* 0.002883911 */, + -PRESHIFT(0x00055000) /* -0.001296997 */, + -PRESHIFT(0x0054c000) /* -0.020690918 */, + PRESHIFT(0x0025d000) /* 0.009231567 */, + -PRESHIFT(0x016ba000) /* -0.088775635 */, + -PRESHIFT(0x02403000) /* -0.140670776 */, + -PRESHIFT(0x0e9be000) /* -0.913055420 */, + PRESHIFT(0x1082d000) /* 1.031936646 */, + PRESHIFT(0x026e7000) /* 0.151962280 */, + PRESHIFT(0x038d4000) /* 0.221984863 */, + PRESHIFT(0x0032e000) /* 0.012420654 */, + PRESHIFT(0x006df000) /* 0.026840210 */, + PRESHIFT(0x0007d000) /* 0.001907349 */, + -PRESHIFT(0x00053000) /* -0.001266479 */, + PRESHIFT(0x00007000) /* 0.000106812 */, + -PRESHIFT(0x00004000) /* -0.000061035 */, + PRESHIFT(0x000bd000) /* 0.002883911 */, + -PRESHIFT(0x00055000) /* -0.001296997 */, + -PRESHIFT(0x0054c000) /* -0.020690918 */, + PRESHIFT(0x0025d000) /* 0.009231567 */, + -PRESHIFT(0x016ba000) /* -0.088775635 */, + -PRESHIFT(0x02403000) /* -0.140670776 */, + -PRESHIFT(0x0e9be000) /* -0.913055420 */, + PRESHIFT(0x1082d000) /* 1.031936646 */, + PRESHIFT(0x026e7000) /* 0.151962280 */, + PRESHIFT(0x038d4000) /* 0.221984863 */, + PRESHIFT(0x0032e000) /* 0.012420654 */, + PRESHIFT(0x006df000) /* 0.026840210 */, + PRESHIFT(0x0007d000) /* 0.001907349 */, + -PRESHIFT(0x00053000) /* -0.001266479 */, + PRESHIFT(0x00007000) /* 0.000106812 */ }, + + { -PRESHIFT(0x00004000) /* -0.000061035 */, /* 14 */ + PRESHIFT(0x000b1000) /* 0.002700806 */, + -PRESHIFT(0x0005b000) /* -0.001388550 */, + -PRESHIFT(0x00594000) /* -0.021789551 */, + PRESHIFT(0x00192000) /* 0.006134033 */, + -PRESHIFT(0x01bf2000) /* -0.109161377 */, + -PRESHIFT(0x024c8000) /* -0.143676758 */, + -PRESHIFT(0x0ef69000) /* -0.935195923 */, + PRESHIFT(0x103be000) /* 1.014617920 */, + PRESHIFT(0x026bc000) /* 0.151306152 */, + PRESHIFT(0x032b4000) /* 0.198059082 */, + PRESHIFT(0x00221000) /* 0.008316040 */, + PRESHIFT(0x006a2000) /* 0.025909424 */, + PRESHIFT(0x00075000) /* 0.001785278 */, + -PRESHIFT(0x0006a000) /* -0.001617432 */, + PRESHIFT(0x00007000) /* 0.000106812 */, + -PRESHIFT(0x00004000) /* -0.000061035 */, + PRESHIFT(0x000b1000) /* 0.002700806 */, + -PRESHIFT(0x0005b000) /* -0.001388550 */, + -PRESHIFT(0x00594000) /* -0.021789551 */, + PRESHIFT(0x00192000) /* 0.006134033 */, + -PRESHIFT(0x01bf2000) /* -0.109161377 */, + -PRESHIFT(0x024c8000) /* -0.143676758 */, + -PRESHIFT(0x0ef69000) /* -0.935195923 */, + PRESHIFT(0x103be000) /* 1.014617920 */, + PRESHIFT(0x026bc000) /* 0.151306152 */, + PRESHIFT(0x032b4000) /* 0.198059082 */, + PRESHIFT(0x00221000) /* 0.008316040 */, + PRESHIFT(0x006a2000) /* 0.025909424 */, + PRESHIFT(0x00075000) /* 0.001785278 */, + -PRESHIFT(0x0006a000) /* -0.001617432 */, + PRESHIFT(0x00007000) /* 0.000106812 */ }, + + { -PRESHIFT(0x00005000) /* -0.000076294 */, /* 15 */ + PRESHIFT(0x000a3000) /* 0.002487183 */, + -PRESHIFT(0x00061000) /* -0.001480103 */, + -PRESHIFT(0x005da000) /* -0.022857666 */, + PRESHIFT(0x000b9000) /* 0.002822876 */, + -PRESHIFT(0x0215c000) /* -0.130310059 */, + -PRESHIFT(0x02571000) /* -0.146255493 */, + -PRESHIFT(0x0f4dc000) /* -0.956481934 */, + PRESHIFT(0x0ff0a000) /* 0.996246338 */, + PRESHIFT(0x0266e000) /* 0.150115967 */, + PRESHIFT(0x02cbf000) /* 0.174789429 */, + PRESHIFT(0x00120000) /* 0.004394531 */, + PRESHIFT(0x00662000) /* 0.024932861 */, + PRESHIFT(0x0006f000) /* 0.001693726 */, + -PRESHIFT(0x0007f000) /* -0.001937866 */, + PRESHIFT(0x00006000) /* 0.000091553 */, + -PRESHIFT(0x00005000) /* -0.000076294 */, + PRESHIFT(0x000a3000) /* 0.002487183 */, + -PRESHIFT(0x00061000) /* -0.001480103 */, + -PRESHIFT(0x005da000) /* -0.022857666 */, + PRESHIFT(0x000b9000) /* 0.002822876 */, + -PRESHIFT(0x0215c000) /* -0.130310059 */, + -PRESHIFT(0x02571000) /* -0.146255493 */, + -PRESHIFT(0x0f4dc000) /* -0.956481934 */, + PRESHIFT(0x0ff0a000) /* 0.996246338 */, + PRESHIFT(0x0266e000) /* 0.150115967 */, + PRESHIFT(0x02cbf000) /* 0.174789429 */, + PRESHIFT(0x00120000) /* 0.004394531 */, + PRESHIFT(0x00662000) /* 0.024932861 */, + PRESHIFT(0x0006f000) /* 0.001693726 */, + -PRESHIFT(0x0007f000) /* -0.001937866 */, + PRESHIFT(0x00006000) /* 0.000091553 */ }, + + { -PRESHIFT(0x00005000) /* -0.000076294 */, /* 16 */ + PRESHIFT(0x00092000) /* 0.002227783 */, + -PRESHIFT(0x00068000) /* -0.001586914 */, + -PRESHIFT(0x0061f000) /* -0.023910522 */, + -PRESHIFT(0x0002d000) /* -0.000686646 */, + -PRESHIFT(0x026f7000) /* -0.152206421 */, + -PRESHIFT(0x025ff000) /* -0.148422241 */, + -PRESHIFT(0x0fa13000) /* -0.976852417 */, + PRESHIFT(0x0fa13000) /* 0.976852417 */, + PRESHIFT(0x025ff000) /* 0.148422241 */, + PRESHIFT(0x026f7000) /* 0.152206421 */, + PRESHIFT(0x0002d000) /* 0.000686646 */, + PRESHIFT(0x0061f000) /* 0.023910522 */, + PRESHIFT(0x00068000) /* 0.001586914 */, + -PRESHIFT(0x00092000) /* -0.002227783 */, + PRESHIFT(0x00005000) /* 0.000076294 */, + + -PRESHIFT(0x00005000) /* -0.000076294 */, + PRESHIFT(0x00092000) /* 0.002227783 */, + -PRESHIFT(0x00068000) /* -0.001586914 */, + -PRESHIFT(0x0061f000) /* -0.023910522 */, + -PRESHIFT(0x0002d000) /* -0.000686646 */, + -PRESHIFT(0x026f7000) /* -0.152206421 */, + -PRESHIFT(0x025ff000) /* -0.148422241 */, + -PRESHIFT(0x0fa13000) /* -0.976852417 */, + PRESHIFT(0x0fa13000) /* 0.976852417 */, + PRESHIFT(0x025ff000) /* 0.148422241 */, + PRESHIFT(0x026f7000) /* 0.152206421 */, + PRESHIFT(0x0002d000) /* 0.000686646 */, + PRESHIFT(0x0061f000) /* 0.023910522 */, + PRESHIFT(0x00068000) /* 0.001586914 */, + -PRESHIFT(0x00092000) /* -0.002227783 */, + PRESHIFT(0x00005000) /* 0.000076294 */ } Index: apps/codecs/libmad/D_even.dat =================================================================== --- apps/codecs/libmad/D_even.dat (revision 0) +++ apps/codecs/libmad/D_even.dat (revision 0) @@ -0,0 +1,307 @@ +{ + PRESHIFT(0x00000000) /* 0.000000000 */, /* 0 */ + PRESHIFT(0x000d5000) /* 0.003250122 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + PRESHIFT(0x019ae000) /* 0.100311279 */, + PRESHIFT(0x1251e000) /* 1.144989014 */, + PRESHIFT(0x019ae000) /* 0.100311279 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + PRESHIFT(0x000d5000) /* 0.003250122 */, + PRESHIFT(0x00000000) /* 0.000000000 */, + PRESHIFT(0x000d5000) /* 0.003250122 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + PRESHIFT(0x019ae000) /* 0.100311279 */, + PRESHIFT(0x1251e000) /* 1.144989014 */, + PRESHIFT(0x019ae000) /* 0.100311279 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + PRESHIFT(0x000d5000) /* 0.003250122 */, +}, + { + -PRESHIFT(0x00001000) /* -0.000015259 */, /* 1 */ + PRESHIFT(0x000da000) /* 0.003326416 */, + PRESHIFT(0x007d0000) /* 0.030517578 */, + PRESHIFT(0x01747000) /* 0.090927124 */, + PRESHIFT(0x124f0000) /* 1.144287109 */, + PRESHIFT(0x01bde000) /* 0.108856201 */, + PRESHIFT(0x0080f000) /* 0.031478882 */, + PRESHIFT(0x000d0000) /* 0.003173828 */, + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000da000) /* 0.003326416 */, + PRESHIFT(0x007d0000) /* 0.030517578 */, + PRESHIFT(0x01747000) /* 0.090927124 */, + PRESHIFT(0x124f0000) /* 1.144287109 */, + PRESHIFT(0x01bde000) /* 0.108856201 */, + PRESHIFT(0x0080f000) /* 0.031478882 */, + PRESHIFT(0x000d0000) /* 0.003173828 */, +}, + { + -PRESHIFT(0x00001000) /* -0.000015259 */, /* 2 */ + PRESHIFT(0x000de000) /* 0.003387451 */, + PRESHIFT(0x007a0000) /* 0.029785156 */, + PRESHIFT(0x014a8000) /* 0.080688477 */, + PRESHIFT(0x12468000) /* 1.142211914 */, + PRESHIFT(0x01dd8000) /* 0.116577148 */, + PRESHIFT(0x00820000) /* 0.031738281 */, + PRESHIFT(0x000ca000) /* 0.003082275 */, + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000de000) /* 0.003387451 */, + PRESHIFT(0x007a0000) /* 0.029785156 */, + PRESHIFT(0x014a8000) /* 0.080688477 */, + PRESHIFT(0x12468000) /* 1.142211914 */, + PRESHIFT(0x01dd8000) /* 0.116577148 */, + PRESHIFT(0x00820000) /* 0.031738281 */, + PRESHIFT(0x000ca000) /* 0.003082275 */, +}, + { + -PRESHIFT(0x00001000) /* -0.000015259 */, /* 3 */ + PRESHIFT(0x000e1000) /* 0.003433228 */, + PRESHIFT(0x00765000) /* 0.028884888 */, + PRESHIFT(0x011d1000) /* 0.069595337 */, + PRESHIFT(0x12386000) /* 1.138763428 */, + PRESHIFT(0x01f9c000) /* 0.123474121 */, + PRESHIFT(0x00827000) /* 0.031845093 */, + PRESHIFT(0x000c4000) /* 0.002990723 */, + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000e1000) /* 0.003433228 */, + PRESHIFT(0x00765000) /* 0.028884888 */, + PRESHIFT(0x011d1000) /* 0.069595337 */, + PRESHIFT(0x12386000) /* 1.138763428 */, + PRESHIFT(0x01f9c000) /* 0.123474121 */, + PRESHIFT(0x00827000) /* 0.031845093 */, + PRESHIFT(0x000c4000) /* 0.002990723 */, +}, + { + -PRESHIFT(0x00001000) /* -0.000015259 */, /* 4 */ + PRESHIFT(0x000e3000) /* 0.003463745 */, + PRESHIFT(0x0071e000) /* 0.027801514 */, + PRESHIFT(0x00ec0000) /* 0.057617187 */, + PRESHIFT(0x12249000) /* 1.133926392 */, + PRESHIFT(0x0212c000) /* 0.129577637 */, + PRESHIFT(0x00825000) /* 0.031814575 */, + PRESHIFT(0x000be000) /* 0.002899170 */, + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000e3000) /* 0.003463745 */, + PRESHIFT(0x0071e000) /* 0.027801514 */, + PRESHIFT(0x00ec0000) /* 0.057617187 */, + PRESHIFT(0x12249000) /* 1.133926392 */, + PRESHIFT(0x0212c000) /* 0.129577637 */, + PRESHIFT(0x00825000) /* 0.031814575 */, + PRESHIFT(0x000be000) /* 0.002899170 */, +}, + { + -PRESHIFT(0x00001000) /* -0.000015259 */, /* 5 */ + PRESHIFT(0x000e4000) /* 0.003479004 */, + PRESHIFT(0x006cb000) /* 0.026535034 */, + PRESHIFT(0x00b77000) /* 0.044784546 */, + PRESHIFT(0x120b4000) /* 1.127746582 */, + PRESHIFT(0x02288000) /* 0.134887695 */, + PRESHIFT(0x0081b000) /* 0.031661987 */, + PRESHIFT(0x000b7000) /* 0.002792358 */, + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000e4000) /* 0.003479004 */, + PRESHIFT(0x006cb000) /* 0.026535034 */, + PRESHIFT(0x00b77000) /* 0.044784546 */, + PRESHIFT(0x120b4000) /* 1.127746582 */, + PRESHIFT(0x02288000) /* 0.134887695 */, + PRESHIFT(0x0081b000) /* 0.031661987 */, + PRESHIFT(0x000b7000) /* 0.002792358 */, +}, + { + -PRESHIFT(0x00001000) /* -0.000015259 */, /* 6 */ + PRESHIFT(0x000e4000) /* 0.003479004 */, + PRESHIFT(0x0066c000) /* 0.025085449 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + PRESHIFT(0x11ec7000) /* 1.120223999 */, + PRESHIFT(0x023b3000) /* 0.139450073 */, + PRESHIFT(0x00809000) /* 0.031387329 */, + PRESHIFT(0x000b0000) /* 0.002685547 */, + -PRESHIFT(0x00001000) /* -0.000015259 */, + PRESHIFT(0x000e4000) /* 0.003479004 */, + PRESHIFT(0x0066c000) /* 0.025085449 */, + PRESHIFT(0x007f5000) /* 0.031082153 */, + PRESHIFT(0x11ec7000) /* 1.120223999 */, + PRESHIFT(0x023b3000) /* 0.139450073 */, + PRESHIFT(0x00809000) /* 0.031387329 */, + PRESHIFT(0x000b0000) /* 0.002685547 */, +}, + { + -PRESHIFT(0x00002000) /* -0.000030518 */, /* 7 */ + PRESHIFT(0x000e3000) /* 0.003463745 */, + PRESHIFT(0x005ff000) /* 0.023422241 */, + PRESHIFT(0x0043a000) /* 0.016510010 */, + PRESHIFT(0x11c83000) /* 1.111373901 */, + PRESHIFT(0x024ad000) /* 0.143264771 */, + PRESHIFT(0x007f0000) /* 0.031005859 */, + PRESHIFT(0x000a9000) /* 0.002578735 */, + -PRESHIFT(0x00002000) /* -0.000030518 */, + PRESHIFT(0x000e3000) /* 0.003463745 */, + PRESHIFT(0x005ff000) /* 0.023422241 */, + PRESHIFT(0x0043a000) /* 0.016510010 */, + PRESHIFT(0x11c83000) /* 1.111373901 */, + PRESHIFT(0x024ad000) /* 0.143264771 */, + PRESHIFT(0x007f0000) /* 0.031005859 */, + PRESHIFT(0x000a9000) /* 0.002578735 */, +}, + { + -PRESHIFT(0x00002000) /* -0.000030518 */, /* 8 */ + PRESHIFT(0x000e0000) /* 0.003417969 */, + PRESHIFT(0x00586000) /* 0.021575928 */, + PRESHIFT(0x00046000) /* 0.001068115 */, + PRESHIFT(0x119e9000) /* 1.101211548 */, + PRESHIFT(0x02578000) /* 0.146362305 */, + PRESHIFT(0x007d1000) /* 0.030532837 */, + PRESHIFT(0x000a1000) /* 0.002456665 */, + -PRESHIFT(0x00002000) /* -0.000030518 */, + PRESHIFT(0x000e0000) /* 0.003417969 */, + PRESHIFT(0x00586000) /* 0.021575928 */, + PRESHIFT(0x00046000) /* 0.001068115 */, + PRESHIFT(0x119e9000) /* 1.101211548 */, + PRESHIFT(0x02578000) /* 0.146362305 */, + PRESHIFT(0x007d1000) /* 0.030532837 */, + PRESHIFT(0x000a1000) /* 0.002456665 */, +}, + { + -PRESHIFT(0x00002000) /* -0.000030518 */, /* 9 */ + PRESHIFT(0x000dd000) /* 0.003372192 */, + PRESHIFT(0x00500000) /* 0.019531250 */, + -PRESHIFT(0x003e6000) /* -0.015228271 */, + PRESHIFT(0x116fc000) /* 1.089782715 */, + PRESHIFT(0x02616000) /* 0.148773193 */, + PRESHIFT(0x007aa000) /* 0.029937744 */, + PRESHIFT(0x0009a000) /* 0.002349854 */, + -PRESHIFT(0x00002000) /* -0.000030518 */, + PRESHIFT(0x000dd000) /* 0.003372192 */, + PRESHIFT(0x00500000) /* 0.019531250 */, + -PRESHIFT(0x003e6000) /* -0.015228271 */, + PRESHIFT(0x116fc000) /* 1.089782715 */, + PRESHIFT(0x02616000) /* 0.148773193 */, + PRESHIFT(0x007aa000) /* 0.029937744 */, + PRESHIFT(0x0009a000) /* 0.002349854 */, +}, + { + -PRESHIFT(0x00002000) /* -0.000030518 */, /* 10 */ + PRESHIFT(0x000d7000) /* 0.003280640 */, + PRESHIFT(0x0046b000) /* 0.017257690 */, + -PRESHIFT(0x0084a000) /* -0.032379150 */, + PRESHIFT(0x113be000) /* 1.077117920 */, + PRESHIFT(0x02687000) /* 0.150497437 */, + PRESHIFT(0x0077f000) /* 0.029281616 */, + PRESHIFT(0x00093000) /* 0.002243042 */, + -PRESHIFT(0x00002000) /* -0.000030518 */, + PRESHIFT(0x000d7000) /* 0.003280640 */, + PRESHIFT(0x0046b000) /* 0.017257690 */, + -PRESHIFT(0x0084a000) /* -0.032379150 */, + PRESHIFT(0x113be000) /* 1.077117920 */, + PRESHIFT(0x02687000) /* 0.150497437 */, + PRESHIFT(0x0077f000) /* 0.029281616 */, + PRESHIFT(0x00093000) /* 0.002243042 */, +}, + { + -PRESHIFT(0x00003000) /* -0.000045776 */, /* 11 */ + PRESHIFT(0x000d0000) /* 0.003173828 */, + PRESHIFT(0x003ca000) /* 0.014801025 */, + -PRESHIFT(0x00ce4000) /* -0.050354004 */, + PRESHIFT(0x1102f000) /* 1.063217163 */, + PRESHIFT(0x026cf000) /* 0.151596069 */, + PRESHIFT(0x0074e000) /* 0.028533936 */, + PRESHIFT(0x0008b000) /* 0.002120972 */, + -PRESHIFT(0x00003000) /* -0.000045776 */, + PRESHIFT(0x000d0000) /* 0.003173828 */, + PRESHIFT(0x003ca000) /* 0.014801025 */, + -PRESHIFT(0x00ce4000) /* -0.050354004 */, + PRESHIFT(0x1102f000) /* 1.063217163 */, + PRESHIFT(0x026cf000) /* 0.151596069 */, + PRESHIFT(0x0074e000) /* 0.028533936 */, + PRESHIFT(0x0008b000) /* 0.002120972 */, +}, + { + -PRESHIFT(0x00003000) /* -0.000045776 */, /* 12 */ + PRESHIFT(0x000c8000) /* 0.003051758 */, + PRESHIFT(0x0031a000) /* 0.012115479 */, + -PRESHIFT(0x011b5000) /* -0.069168091 */, + PRESHIFT(0x10c54000) /* 1.048156738 */, + PRESHIFT(0x026ee000) /* 0.152069092 */, + PRESHIFT(0x00719000) /* 0.027725220 */, + PRESHIFT(0x00084000) /* 0.002014160 */, + -PRESHIFT(0x00003000) /* -0.000045776 */, + PRESHIFT(0x000c8000) /* 0.003051758 */, + PRESHIFT(0x0031a000) /* 0.012115479 */, + -PRESHIFT(0x011b5000) /* -0.069168091 */, + PRESHIFT(0x10c54000) /* 1.048156738 */, + PRESHIFT(0x026ee000) /* 0.152069092 */, + PRESHIFT(0x00719000) /* 0.027725220 */, + PRESHIFT(0x00084000) /* 0.002014160 */, +}, + { + -PRESHIFT(0x00004000) /* -0.000061035 */, /* 13 */ + PRESHIFT(0x000bd000) /* 0.002883911 */, + PRESHIFT(0x0025d000) /* 0.009231567 */, + -PRESHIFT(0x016ba000) /* -0.088775635 */, + PRESHIFT(0x1082d000) /* 1.031936646 */, + PRESHIFT(0x026e7000) /* 0.151962280 */, + PRESHIFT(0x006df000) /* 0.026840210 */, + PRESHIFT(0x0007d000) /* 0.001907349 */, + -PRESHIFT(0x00004000) /* -0.000061035 */, + PRESHIFT(0x000bd000) /* 0.002883911 */, + PRESHIFT(0x0025d000) /* 0.009231567 */, + -PRESHIFT(0x016ba000) /* -0.088775635 */, + PRESHIFT(0x1082d000) /* 1.031936646 */, + PRESHIFT(0x026e7000) /* 0.151962280 */, + PRESHIFT(0x006df000) /* 0.026840210 */, + PRESHIFT(0x0007d000) /* 0.001907349 */, +}, + { + -PRESHIFT(0x00004000) /* -0.000061035 */, /* 14 */ + PRESHIFT(0x000b1000) /* 0.002700806 */, + PRESHIFT(0x00192000) /* 0.006134033 */, + -PRESHIFT(0x01bf2000) /* -0.109161377 */, + PRESHIFT(0x103be000) /* 1.014617920 */, + PRESHIFT(0x026bc000) /* 0.151306152 */, + PRESHIFT(0x006a2000) /* 0.025909424 */, + PRESHIFT(0x00075000) /* 0.001785278 */, + -PRESHIFT(0x00004000) /* -0.000061035 */, + PRESHIFT(0x000b1000) /* 0.002700806 */, + PRESHIFT(0x00192000) /* 0.006134033 */, + -PRESHIFT(0x01bf2000) /* -0.109161377 */, + PRESHIFT(0x103be000) /* 1.014617920 */, + PRESHIFT(0x026bc000) /* 0.151306152 */, + PRESHIFT(0x006a2000) /* 0.025909424 */, + PRESHIFT(0x00075000) /* 0.001785278 */, +}, + { + -PRESHIFT(0x00005000) /* -0.000076294 */, /* 15 */ + PRESHIFT(0x000a3000) /* 0.002487183 */, + PRESHIFT(0x000b9000) /* 0.002822876 */, + -PRESHIFT(0x0215c000) /* -0.130310059 */, + PRESHIFT(0x0ff0a000) /* 0.996246338 */, + PRESHIFT(0x0266e000) /* 0.150115967 */, + PRESHIFT(0x00662000) /* 0.024932861 */, + PRESHIFT(0x0006f000) /* 0.001693726 */, + -PRESHIFT(0x00005000) /* -0.000076294 */, + PRESHIFT(0x000a3000) /* 0.002487183 */, + PRESHIFT(0x000b9000) /* 0.002822876 */, + -PRESHIFT(0x0215c000) /* -0.130310059 */, + PRESHIFT(0x0ff0a000) /* 0.996246338 */, + PRESHIFT(0x0266e000) /* 0.150115967 */, + PRESHIFT(0x00662000) /* 0.024932861 */, + PRESHIFT(0x0006f000) /* 0.001693726 */, +}, + { + -PRESHIFT(0x00005000) /* -0.000076294 */, /* 16 */ + PRESHIFT(0x00092000) /* 0.002227783 */, + -PRESHIFT(0x0002d000) /* -0.000686646 */, + -PRESHIFT(0x026f7000) /* -0.152206421 */, + PRESHIFT(0x0fa13000) /* 0.976852417 */, + PRESHIFT(0x025ff000) /* 0.148422241 */, + PRESHIFT(0x0061f000) /* 0.023910522 */, + PRESHIFT(0x00068000) /* 0.001586914 */, + -PRESHIFT(0x00005000) /* -0.000076294 */, + PRESHIFT(0x00092000) /* 0.002227783 */, + -PRESHIFT(0x0002d000) /* -0.000686646 */, + -PRESHIFT(0x026f7000) /* -0.152206421 */, + PRESHIFT(0x0fa13000) /* 0.976852417 */, + PRESHIFT(0x025ff000) /* 0.148422241 */, + PRESHIFT(0x0061f000) /* 0.023910522 */, + PRESHIFT(0x00068000) /* 0.001586914 */, +}, + \ No newline at end of file Index: apps/codecs/libmad/synth.c =================================================================== --- apps/codecs/libmad/synth.c (revision 28580) +++ apps/codecs/libmad/synth.c (working copy) @@ -97,7 +97,8 @@ /* second SSO shift, with rounding */ # if defined(OPT_SSO) -# define SHIFT(x) (((x) + (1L << 11)) >> 12) +# define SHIFT(x) (x) +//# define SHIFT(x) (((x) + (1L << 11)) >> 12) # else # define SHIFT(x) (x) # endif @@ -130,16 +131,19 @@ hi; \ }) # elif defined(OPT_SPEED) && defined(MAD_F_MLX) -# define MUL(x, y) \ - ({ mad_fixed64hi_t hi; \ - mad_fixed64lo_t lo; \ - MAD_F_MLX(hi, lo, (x), (y)); \ - hi << (32 - MAD_F_SCALEBITS - 3); \ - }) + # else -# define MUL(x, y) mad_f_mul((x), (y>>3)) +//# define MUL(x, y) mad_f_mul((x), (y>>3)) +# define MUL(x, y) \ + (int32_t)(((int64_t)x) *((int64_t)y)>>31) + + # endif + + + + /* * NAME: dct32() * DESCRIPTION: perform fast in[32]->out[32] DCT @@ -491,7 +495,7 @@ /* 31 */ lo[15][slot] = SHIFT((((((((MUL(t171 - t172, costab16) * 2) - t173) * 2) - t174) * 2) - t175) * 2) - t176); - + //DEBUGF("lo[13][slot]: %d\n", lo[13][slot]); //lo[13][slot]: -33 /* * Totals: * 80 multiplies @@ -512,12 +516,13 @@ # if MAD_F_FRACBITS != 28 # error "MAD_F_FRACBITS must be 28 to use OPT_SSO" # endif -# define ML0(hi, lo, x, y) ((lo) = (x) * (y)) -# define MLA(hi, lo, x, y) ((lo) += (x) * (y)) +//# define ML0(hi, lo, x, y) ((lo) = (x) * (y)) +//# define MLA(hi, lo, x, y) ((lo) += (x) * (y)) # define MLN(hi, lo) ((lo) = -(lo)) # define MLZ(hi, lo) ((void) (hi), (mad_fixed_t) (lo)) -# define SHIFT(x) ((x) >> 2) -# define PRESHIFT(x) ((MAD_F(x) + (1L << 13)) >> 14) +# define SHIFT(x) ((x) << 2) +# define PRESHIFT(x) (((x) + (1L << 13)) >> 14) +//# define PRESHIFT(x) ((x) >> 12) # else # define ML0(hi, lo, x, y) MAD_F_ML0((hi), (lo), (x), (y)) # define MLA(hi, lo, x, y) MAD_F_MLA((hi), (lo), (x), (y)) @@ -533,11 +538,69 @@ # endif # endif +//# define PRESHIFT(x) ((MAD_F(x) + (1L << 13)) >> 14) +//# define PRESHIFT(x) ((MAD_F(x) + (1L << 13)) >> 24) +/*# define ML0(hi, lo, x, y) \ + ((mad_fixed_t) (((mad_fixed64_t) (x) * (y)) >> (MAD_F_SCALEBITS-16)))*/ + + +union magic { + struct { + int32_t lo; + int32_t hi; + } halves; + int64_t whole; +}; + + + +#if 0 +# define ML0(hi, lo, x, y) \ + {union magic magic1; \ + magic1.whole = (int64_t)x * y; \ + hi=magic1.halves.hi; \ + lo=magic1.halves.lo;} + +# define MLA(hi, lo, x, y) \ + { union magic magic1; \ + magic1.halves.lo=lo; magic1.halves.hi=hi; \ + magic1.whole += (int64_t)x * y; \ + /*hi=magic1.halves.hi;*/ \ + lo=magic1.halves.lo; } +#else + +# define ML0(hi, lo, x, y) \ + lo =(int32_t) (( ((int64_t)x) * ((int64_t)y)) >>16); \ + hi=0; + +# define MLA(hi, lo, x, y) \ + lo +=(int32_t) (( ((int64_t)x) * ((int64_t)y)) >>16); \ + +#endif + + static -mad_fixed_t const D[17][32] ICONST_ATTR = { +int32_t const D[17][32] ICONST_ATTR = { +# include "D_sort.dat" +}; + + +static +int32_t const De[17][16] ICONST_ATTR = { +# include "D_even.dat" +}; + +static +int32_t const Do[17][16] ICONST_ATTR = { +# include "D_odd.dat" +}; + +static +int32_t const E[17][32] ICONST_ATTR = { # include "D.dat" }; + /* * NAME: synth->full() * DESCRIPTION: perform full frequency PCM synthesis @@ -763,7 +826,7 @@ } } -#elif defined(FPM_ARM) +#elif defined(FPM_ARM) && 0 #define PROD_O(hi, lo, f, ptr) \ ({ \ @@ -913,58 +976,200 @@ } # else /* not FPM_COLDFIRE_EMAC and not FPM_ARM */ +/* -#define PROD_O(hi, lo, f, ptr, offset) \ - ML0(hi, lo, (*f)[0], ptr[ 0+offset]); \ - MLA(hi, lo, (*f)[1], ptr[14+offset]); \ - MLA(hi, lo, (*f)[2], ptr[12+offset]); \ - MLA(hi, lo, (*f)[3], ptr[10+offset]); \ - MLA(hi, lo, (*f)[4], ptr[ 8+offset]); \ - MLA(hi, lo, (*f)[5], ptr[ 6+offset]); \ - MLA(hi, lo, (*f)[6], ptr[ 4+offset]); \ - MLA(hi, lo, (*f)[7], ptr[ 2+offset]); - -#define PROD_A(hi, lo, f, ptr, offset) \ - MLA(hi, lo, (*f)[0], ptr[ 0+offset]); \ - MLA(hi, lo, (*f)[1], ptr[14+offset]); \ - MLA(hi, lo, (*f)[2], ptr[12+offset]); \ - MLA(hi, lo, (*f)[3], ptr[10+offset]); \ - MLA(hi, lo, (*f)[4], ptr[ 8+offset]); \ - MLA(hi, lo, (*f)[5], ptr[ 6+offset]); \ - MLA(hi, lo, (*f)[6], ptr[ 4+offset]); \ - MLA(hi, lo, (*f)[7], ptr[ 2+offset]); - -#define PROD_SB(hi, lo, ptr, offset, first_idx, last_idx) \ - ML0(hi, lo, (*fe)[0], ptr[first_idx]); \ - MLA(hi, lo, (*fe)[1], ptr[16+offset]); \ - MLA(hi, lo, (*fe)[2], ptr[18+offset]); \ - MLA(hi, lo, (*fe)[3], ptr[20+offset]); \ - MLA(hi, lo, (*fe)[4], ptr[22+offset]); \ - MLA(hi, lo, (*fe)[5], ptr[24+offset]); \ - MLA(hi, lo, (*fe)[6], ptr[26+offset]); \ - MLA(hi, lo, (*fe)[7], ptr[28+offset]); \ - MLA(hi, lo, (*fo)[7], ptr[29-offset]); \ - MLA(hi, lo, (*fo)[6], ptr[27-offset]); \ - MLA(hi, lo, (*fo)[5], ptr[25-offset]); \ - MLA(hi, lo, (*fo)[4], ptr[23-offset]); \ - MLA(hi, lo, (*fo)[3], ptr[21-offset]); \ - MLA(hi, lo, (*fo)[2], ptr[19-offset]); \ - MLA(hi, lo, (*fo)[1], ptr[17-offset]); \ - MLA(hi, lo, (*fo)[0], ptr[last_idx ]); +basic idea: +The PROD_ calls all step by two at a time, so pairing all the even values, and then all the odd values together would mean that +we could do a packed load everytime. However, this is complicated by the fact that not all accesses will be aligned to either +the first or second even or odd digit. So for instance, one call might load and need the second of two packed values but not the +first. We could try and detect this in the code by checking if ptr%4 is 0,1,2,3 (which is what I think the even/odd does). +*/ + +#if 0 +//use 1 register for accum, 1 for audio ptr, 1 for D ptr, 8 for audio data, 2 for D values = 13 used +#define PROD_O_EVEN_EVEN(hi, lo, f, ptr, offset) \ + ({ \ + mad_fixed_t *__p = (f); \ + asm volatile ( \ + "ldr r8, [%2, #0] \n\t" /*load D[0],D[2]*/ \ + "ldmia %1!, {r0-r7} \n\t" /*load all audio data*/ \ + "smulwb r12, r0, r8 \n\t" /*ML0(hi, lo, (*f)[0], ptr[ 0]); 0 */\ + "ldr r9, [%2, #8] \n\t" /*load D[4],D[6]*/ \ + "smlawt r12,r7,r8,r12 \n\t" /*MLA(hi, lo, (*f)[7], ptr[ 1]); 2 */\ + "smlawb r12,r6,r9,r12 \n\t" /*MLA(hi, lo, (*f)[6], ptr[ 4]); 4 */\ + "ldr r8, [%2, #16] \n\t" /*load D[8],D[10]*/ \ + "smlawt r12,r5,r9,r12 \n\t" /*MLA(hi, lo, (*f)[5], ptr[ 5]); 6 */\ + "smlawb r12,r4,r8,r12 \n\t" /*MLA(hi, lo, (*f)[4], ptr[ 8]); 8 */\ + "ldr r9, [%2, #24] \n\t" /*load D[12],D[14]*/ \ + "smlawt r12,r3,r8,r12 \n\t" /*MLA(hi, lo, (*f)[3], ptr[ 9]); 10 */\ + "smlawb r12,r2,r9,r12 \n\t" /*MLA(hi, lo, (*f)[2], ptr[ 12]); 12 */\ + "smlawt r12,r1,r9,r12 \n\t" /*MLA(hi, lo, (*f)[2], ptr[ 12]); 12 */\ + /* 8x mul (8*1 clk) + 1 ldm (8 clk) + 4x ldr (4 clk) = 20 clks */\ + : "=&r" (lo), "+r" (__p) \ + : "r" (ptr) \ + : "r0", "r1", "r2", "r3", "r4", "memory"); \ + }) + + +#endif + + + + + + +//case where (ptr/4)%4 = 1 (simple odd) +#define PROD_O_ODD_EVEN(hi, lo, f, ptr, offset) \ + ML0(hi, lo, (*f)[0], ptr[ 1]); /*0 */\ + MLA(hi, lo, (*f)[1], ptr[14]); /*14*/\ + MLA(hi, lo, (*f)[2], ptr[13]); /*12*/\ + MLA(hi, lo, (*f)[3], ptr[10]); /*10*/\ + MLA(hi, lo, (*f)[4], ptr[ 9]); /*8 */\ + MLA(hi, lo, (*f)[5], ptr[ 6]); /*6 */\ + MLA(hi, lo, (*f)[6], ptr[ 5]); /*4 */\ + MLA(hi, lo, (*f)[7], ptr[ 2]); /*2 */ + +//case where (ptr/4)%4 = 3 (middle odd) +#define PROD_O_ODD_ODD(hi, lo, f, ptr, offset) \ + ML0(hi, lo, (*f)[0], ptr[ 0]); /*0 */\ + MLA(hi, lo, (*f)[1], ptr[15]); /*14*/\ + MLA(hi, lo, (*f)[2], ptr[12]); /*12*/\ + MLA(hi, lo, (*f)[3], ptr[11]); /*10*/\ + MLA(hi, lo, (*f)[4], ptr[ 8]); /*8 */\ + MLA(hi, lo, (*f)[5], ptr[ 7]); /*6 */\ + MLA(hi, lo, (*f)[6], ptr[ 4]); /*4 */\ + MLA(hi, lo, (*f)[7], ptr[ 3]); /*2 */ + + +/*now the accumulating case*/ + + +//case where ptr is evenly divided by 2 twice (e.g. (ptr/4) % 4 == 0) +#define PROD_A_EVEN_EVEN(hi, lo, f, ptr, offset) \ + MLA(hi, lo, (*f)[0], ptr[ 0]); /*0 */\ + MLA(hi, lo, (*f)[1], ptr[13]); /*14*/\ + MLA(hi, lo, (*f)[2], ptr[12]); /*12*/\ + MLA(hi, lo, (*f)[3], ptr[ 9]); /*10*/\ + MLA(hi, lo, (*f)[4], ptr[ 8]); /*8 */\ + MLA(hi, lo, (*f)[5], ptr[ 5]); /*6 */\ + MLA(hi, lo, (*f)[6], ptr[ 4]); /*4 */\ + MLA(hi, lo, (*f)[7], ptr[ 1]); /*2 */ + +//case where (ptr/4)%4 == 2 (middle even) +#define PROD_A_EVEN_ODD(hi, lo, f, ptr, offset) \ + MLA(hi, lo, (*f)[0], ptr[-1]); /*0 */\ + MLA(hi, lo, (*f)[1], ptr[14]); /*14*/\ + MLA(hi, lo, (*f)[2], ptr[11]); /*12*/\ + MLA(hi, lo, (*f)[3], ptr[10]); /*10*/\ + MLA(hi, lo, (*f)[4], ptr[ 7]); /*8 */\ + MLA(hi, lo, (*f)[5], ptr[ 6]); /*6 */\ + MLA(hi, lo, (*f)[6], ptr[ 3]); /*4 */\ + MLA(hi, lo, (*f)[7], ptr[ 2]); /*2 */ + +/*now the "EVEN_ODD" SB synthesis functions -Note that ptr is ALWAYS odd index aligned for EVEN_ODD case */ +#if 0 +#define PROD_SB_EVEN_ODD_ONE(hi, lo, ptr, offset, first_idx, last_idx) \ + + }) +#endif +//case where offset = 0, even displacements come first, and (PTR/4)%4 == 1. +#define PROD_SB_EVEN_ODD_ONE(hi, lo, ptr, offset, first_idx, last_idx) \ + ML0(hi, lo, (*fe)[0], ptr[30]); /*30*/\ + MLA(hi, lo, (*fe)[1], ptr[17]); /*16*/\ + MLA(hi, lo, (*fe)[2], ptr[18]); /*18*/\ + MLA(hi, lo, (*fe)[3], ptr[21]); /*20*/\ + MLA(hi, lo, (*fe)[4], ptr[22]); /*22*/\ + MLA(hi, lo, (*fe)[5], ptr[25]); /*24*/\ + MLA(hi, lo, (*fe)[6], ptr[26]); /*26*/\ + MLA(hi, lo, (*fe)[7], ptr[29]); /*28*/\ + MLA(hi, lo, (*fo)[7], ptr[28]); /*29*/\ + MLA(hi, lo, (*fo)[6], ptr[27]); /*27*/\ + MLA(hi, lo, (*fo)[5], ptr[24]); /*25*/\ + MLA(hi, lo, (*fo)[4], ptr[23]); /*23*/\ + MLA(hi, lo, (*fo)[3], ptr[20]); /*21*/\ + MLA(hi, lo, (*fo)[2], ptr[19]); /*19*/\ + MLA(hi, lo, (*fo)[1], ptr[16]); /*17*/\ + MLA(hi, lo, (*fo)[0], ptr[15]); /*15*/\ + +//case where offset = 0, even displacements come first, and (PTR/4)%4 == 3. +#define PROD_SB_EVEN_ODD_THREE(hi, lo, ptr, offset, first_idx, last_idx) \ + ML0(hi, lo, (*fe)[0], ptr[31]); /*30*/\ + MLA(hi, lo, (*fe)[1], ptr[16]); /*16*/\ + MLA(hi, lo, (*fe)[2], ptr[19]); /*18*/\ + MLA(hi, lo, (*fe)[3], ptr[20]); /*20*/\ + MLA(hi, lo, (*fe)[4], ptr[23]); /*22*/\ + MLA(hi, lo, (*fe)[5], ptr[24]); /*24*/\ + MLA(hi, lo, (*fe)[6], ptr[27]); /*26*/\ + MLA(hi, lo, (*fe)[7], ptr[28]); /*28*/\ + MLA(hi, lo, (*fo)[7], ptr[29]); /*29*/\ + MLA(hi, lo, (*fo)[6], ptr[26]); /*27*/\ + MLA(hi, lo, (*fo)[5], ptr[25]); /*25*/\ + MLA(hi, lo, (*fo)[4], ptr[22]); /*23*/\ + MLA(hi, lo, (*fo)[3], ptr[21]); /*21*/\ + MLA(hi, lo, (*fo)[2], ptr[18]); /*19*/\ + MLA(hi, lo, (*fo)[1], ptr[17]); /*17*/\ + MLA(hi, lo, (*fo)[0], ptr[14]); /*15*/ + + +/*now the "ODD_EVEN" SB synthesis functions -Note that ptr is ALWAYS even index aligned for ODD_EVEN case */ + +//case where offset = 1, odd displacements come first, and (PTR/4)%4 == 0. +#define PROD_SB_ODD_EVEN_ZERO(hi, lo, ptr, offset, first_idx, last_idx) \ + ML0(hi, lo, (*fe)[0], ptr[15]); /*15*/\ + MLA(hi, lo, (*fe)[1], ptr[18]); /*17*/\ + MLA(hi, lo, (*fe)[2], ptr[19]); /*19*/\ + MLA(hi, lo, (*fe)[3], ptr[22]); /*21*/\ + MLA(hi, lo, (*fe)[4], ptr[23]); /*23*/\ + MLA(hi, lo, (*fe)[5], ptr[26]); /*25*/\ + MLA(hi, lo, (*fe)[6], ptr[27]); /*27*/\ + MLA(hi, lo, (*fe)[7], ptr[30]); /*29*/\ + MLA(hi, lo, (*fo)[7], ptr[28]); /*28*/\ + MLA(hi, lo, (*fo)[6], ptr[25]); /*26*/\ + MLA(hi, lo, (*fo)[5], ptr[24]); /*24*/\ + MLA(hi, lo, (*fo)[4], ptr[21]); /*22*/\ + MLA(hi, lo, (*fo)[3], ptr[20]); /*20*/\ + MLA(hi, lo, (*fo)[2], ptr[17]); /*18*/\ + MLA(hi, lo, (*fo)[1], ptr[16]); /*16*/\ + MLA(hi, lo, (*fo)[0], ptr[29]); /*30*/ + + +//case where offset = 1, odd displacements come first, and (PTR/4)%4 == 2. +#define PROD_SB_ODD_EVEN_TWO(hi, lo, ptr, offset, first_idx, last_idx) \ + ML0(hi, lo, (*fe)[0], ptr[16]); /*15*/\ + MLA(hi, lo, (*fe)[1], ptr[17]); /*17*/\ + MLA(hi, lo, (*fe)[2], ptr[20]); /*19*/\ + MLA(hi, lo, (*fe)[3], ptr[21]); /*21*/\ + MLA(hi, lo, (*fe)[4], ptr[24]); /*23*/\ + MLA(hi, lo, (*fe)[5], ptr[25]); /*25*/\ + MLA(hi, lo, (*fe)[6], ptr[28]); /*27*/\ + MLA(hi, lo, (*fe)[7], ptr[29]); /*29*/\ + MLA(hi, lo, (*fo)[7], ptr[27]); /*28*/\ + MLA(hi, lo, (*fo)[6], ptr[26]); /*26*/\ + MLA(hi, lo, (*fo)[5], ptr[23]); /*24*/\ + MLA(hi, lo, (*fo)[4], ptr[22]); /*22*/\ + MLA(hi, lo, (*fo)[3], ptr[19]); /*20*/\ + MLA(hi, lo, (*fo)[2], ptr[18]); /*18*/\ + MLA(hi, lo, (*fo)[1], ptr[15]); /*16*/\ + MLA(hi, lo, (*fo)[0], ptr[30]); /*30*/ + + + static void synth_full(struct mad_synth *synth, struct mad_frame const *frame, unsigned int nch, unsigned int ns) { - int p, sb; + int p,p2, sb, i; unsigned int phase, ch, s; mad_fixed_t *pcm, (*filter)[2][2][16][8]; mad_fixed_t (*sbsample)[36][32]; mad_fixed_t (*fe)[8], (*fx)[8], (*fo)[8]; - mad_fixed_t const (*D0ptr)[32], *ptr; - mad_fixed_t const (*D1ptr)[32]; - mad_fixed64hi_t hi; - mad_fixed64lo_t lo; + int32_t const (*D0ptr)[32],(*D0eptr)[16],(*D0optr)[16],(*D1eptr)[16],(*D1optr)[16], *ptr, *ptr2,*eptr,*optr, *Eptr; + int32_t const (*D1ptr)[32]; + int32_t const (*E1ptr)[32]; + int32_t const (*E0ptr)[32]; + mad_fixed64hi_t hi, hi2; + mad_fixed64lo_t lo, lo2; for (ch = 0; ch < nch; ++ch) { sbsample = &(*frame->sbsample_prev)[ch]; @@ -973,86 +1178,729 @@ pcm = synth->pcm.samples[ch]; for (s = 0; s < ns; ++s) { + dct32((*sbsample)[s], phase >> 1, (*filter)[0][phase & 1], (*filter)[1][phase & 1]); - p = (phase - 1) & 0xf; - + p = (phase - 1) & 0xf; //steps 15,0,1,2,3..15, 0... + p2 = (phase - 1) & 0xf; //steps 7,0,1,2,3..7 + //DEBUGF("p: %d s: %d\n", p,s); /* calculate 32 samples */ fe = &(*filter)[0][ phase & 1][0]; fx = &(*filter)[0][~phase & 1][0]; fo = &(*filter)[1][~phase & 1][0]; - D0ptr = (void*)&D[0][ p]; + D0ptr = (void*)&D[0][ p]; //17x32 + D0optr = (void*)&Do[0][ p2>>1]; //17x16 + D0eptr = (void*)&De[0][ p2>>1]; //17x16 D1ptr = (void*)&D[0][-p]; + D1optr = (void*)&Do[0][-(p2>>1)]; //17x16 + D1eptr = (void*)&De[0][-(p2>>1)]; //17x16 + E0ptr = (void*)&E[0][ p]; //17x32 + E1ptr = (void*)&E[0][-p]; + + switch (s & 3) //p = (s-1)%16 + { + case 0: /*s%4 == 0 and p%4 == 3*/ + ptr = *D0ptr; //alignment is p%4, so ptr is 3 aligned - if(s & 1) - { - ptr = *D0ptr; - PROD_O(hi, lo, fx, ptr, 1) - MLN(hi, lo); - PROD_A(hi, lo, fe, ptr, 0) - pcm[0] = SHIFT(MLZ(hi, lo)); - pcm += 16; +#if 0 + PROD_O_ODD_ODD(hi, lo, fx, ptr, 0) +#else + optr = *D0optr; + ML0(hi, lo, (*fx)[0], optr[0]); /*0 */ + MLA(hi, lo, (*fx)[1], optr[7]); /*14*/ + MLA(hi, lo, (*fx)[2], optr[6]); /*12*/ + MLA(hi, lo, (*fx)[3], optr[5]); /*10*/ + MLA(hi, lo, (*fx)[4], optr[4]); /*8 */ + MLA(hi, lo, (*fx)[5], optr[3]); /*6 */ + MLA(hi, lo, (*fx)[6], optr[2]); /*4 */ + MLA(hi, lo, (*fx)[7], optr[1]); /*2 */ +#endif + + MLN(hi, lo); + ptr=ptr+1; //alignment is p%4+1, so ptr is 0 aligned +#if 0 + PROD_A_EVEN_EVEN(hi, lo, fe, ptr, 1) +#else + eptr=*D0eptr; + eptr=eptr+1; + MLA(hi, lo, (*fe)[0], eptr[ 0]); /*0 */ + MLA(hi, lo, (*fe)[1], eptr[7]); /*14*/ + MLA(hi, lo, (*fe)[2], eptr[6]); /*12*/ + MLA(hi, lo, (*fe)[3], eptr[ 5]); /*10*/ + MLA(hi, lo, (*fe)[4], eptr[ 4]); /*8 */ + MLA(hi, lo, (*fe)[5], eptr[ 3]); /*6 */ + MLA(hi, lo, (*fe)[6], eptr[ 2]); /*4 */ + MLA(hi, lo, (*fe)[7], eptr[ 1]); /*2 */ +#endif + pcm[0] = SHIFT(MLZ(hi, lo)); + pcm += 16; - for (sb = 15; sb; sb--, fo++) - { - ++fe; - ++D0ptr; - ++D1ptr; + for (sb = 15; sb; sb--, fo++) + { + ++fe; + ++D0ptr; + ++D0eptr; + ++D0optr; + ++D1ptr; + ++D1eptr; + ++D1optr; + ++E0ptr; + ++E1ptr; - /* D[32 - sb][i] == -D[sb][31 - i] */ - ptr = *D0ptr; - PROD_O(hi, lo, fo, ptr, 1) - MLN(hi, lo); - PROD_A(hi, lo, fe, ptr, 0) - pcm[-sb] = SHIFT(MLZ(hi, lo)); + /* D[32 - sb][i] == -D[sb][31 - i] */ + ptr = *D0ptr; //alignment is p%4, so ptr is 3 aligned + eptr = *D0eptr; + optr = *D0optr; + //PROD_O_ODD_ODD(hi, lo, fo, ptr, 0) - ptr = *D1ptr; - PROD_SB(hi, lo, ptr, 1, 15, 30) - pcm[sb] = SHIFT(MLZ(hi, lo)); - } +#if 1 + + ML0(hi, lo, (*fo)[0], optr[0]); /*0 */ + MLA(hi, lo, (*fo)[1], optr[7]); /*14*/ + MLA(hi, lo, (*fo)[2], optr[6]); /*12*/ + MLA(hi, lo, (*fo)[3], optr[5]); /*10*/ + MLA(hi, lo, (*fo)[4], optr[4]); /*8 */ + MLA(hi, lo, (*fo)[5], optr[3]); /*6 */ + MLA(hi, lo, (*fo)[6], optr[2]); /*4 */ + MLA(hi, lo, (*fo)[7], optr[1]); /*2 */ +#endif +#if 0 + ML0(hi, lo, (*fo)[0], ptr[ 0]); /*0 */ + MLA(hi, lo, (*fo)[1], ptr[15]); /*14*/ + MLA(hi, lo, (*fo)[2], ptr[12]); /*12*/ + MLA(hi, lo, (*fo)[3], ptr[11]); /*10*/ + MLA(hi, lo, (*fo)[4], ptr[ 8]); /*8 */ + MLA(hi, lo, (*fo)[5], ptr[ 7]); /*6 */ + MLA(hi, lo, (*fo)[6], ptr[ 4]); /*4 */ + MLA(hi, lo, (*fo)[7], ptr[ 3]); /*2 */ +#endif - ptr = *(D0ptr + 1); - PROD_O(hi, lo, fo, ptr, 1) - pcm[0] = SHIFT(-MLZ(hi, lo)); - } - else - { - ptr = *D0ptr; - PROD_O(hi, lo, fx, ptr, 0) - MLN(hi, lo); - PROD_A(hi, lo, fe, ptr, 1) - pcm[0] = SHIFT(MLZ(hi, lo)); - pcm += 16; - for (sb = 15; sb; sb--, fo++) - { - ++fe; - ++D0ptr; - ++D1ptr; + MLN(hi, lo); + ptr2 = *D1ptr; //alignment is 4-p%4, so ptr is 1 aligned + optr = *D1optr; + eptr = *D1eptr; +#if 1 - /* D[32 - sb][i] == -D[sb][31 - i] */ - ptr = *D0ptr; - PROD_O(hi, lo, fo, ptr, 0) - MLN(hi, lo); - PROD_A(hi, lo, fe, ptr, 1) - pcm[-sb] = SHIFT(MLZ(hi, lo)); + //DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p,ptr2[28], ptr2[27], ptr2[24], ptr2[23], ptr2[20], ptr2[19], ptr2[16], ptr2[15]); + //DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p2,optr[14], optr[13],optr[12],optr[11],optr[10], optr[9],optr[8],optr[7]); + //DEBUGF("D value: %d [%d][%d]\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32); + //DEBUGF("De value: %d [%d][%d]\n", ((int)eptr-(int)De)/4, (((int)eptr-(int)De)/4)/16,(((int)eptr-(int)De)/4)%16); - ptr = *D1ptr; - PROD_SB(hi, lo, ptr, 0, 30, 15) - pcm[sb] = SHIFT(MLZ(hi, lo)); - } - ptr = *(D0ptr + 1); - PROD_O(hi, lo, fo, ptr, 0) - pcm[0] = SHIFT(-MLZ(hi, lo)); - } + ML0(hi2, lo2, (*fo)[7], eptr[14]); /*29*/ + MLA(hi2, lo2, (*fo)[6], eptr[13]); /*27*/ + MLA(hi2, lo2, (*fo)[5], eptr[12]); /*25*/ + MLA(hi2, lo2, (*fo)[4], eptr[11]); /*23*/ + MLA(hi2, lo2, (*fo)[3], eptr[10]); /*21*/ + MLA(hi2, lo2, (*fo)[2], eptr[9]); /*19*/ + MLA(hi2, lo2, (*fo)[1], eptr[8]); /*17*/ + MLA(hi2, lo2, (*fo)[0], eptr[7]); /*15*/ +#else + + ML0(hi2, lo2, (*fo)[7], ptr2[28]); /*29*/ + MLA(hi2, lo2, (*fo)[6], ptr2[27]); /*27*/ + MLA(hi2, lo2, (*fo)[5], ptr2[24]); /*25*/ + MLA(hi2, lo2, (*fo)[4], ptr2[23]); /*23*/ + MLA(hi2, lo2, (*fo)[3], ptr2[20]); /*21*/ + MLA(hi2, lo2, (*fo)[2], ptr2[19]); /*19*/ + MLA(hi2, lo2, (*fo)[1], ptr2[16]); /*17*/ + MLA(hi2, lo2, (*fo)[0], ptr2[15]); /*15*/ + +#endif + ptr=ptr+1; //alignement is p%4+1, so ptr is 0 aligned + // PROD_A_EVEN_EVEN(hi, lo, fe, ptr, 1) + + +#if 1 + ptr=*E0ptr; + ptr=ptr+1; + eptr=*D0eptr; + eptr=eptr+1; + // DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p,ptr[0], ptr[14], ptr[12], ptr[10], ptr[8], ptr[6], ptr[4], ptr[2]); + //DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p2,eptr[0], eptr[7],eptr[6],eptr[5],eptr[4], eptr[3],eptr[2],eptr[1]); + //DEBUGF("D value: %d [%d][%d]\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32); + //DEBUGF("De value: %d [%d][%d]\n", ((int)eptr-(int)De)/4, (((int)eptr-(int)De)/4)/16,(((int)eptr-(int)De)/4)%16); + if(ptr[14] != eptr[7]) + exit(0); + MLA(hi, lo, (*fe)[0], eptr[ 0]); /*0 */ + MLA(hi, lo, (*fe)[1], eptr[7]); /*14*/ + MLA(hi, lo, (*fe)[2], eptr[6]); /*12*/ + MLA(hi, lo, (*fe)[3], eptr[ 5]); /*10*/ + MLA(hi, lo, (*fe)[4], eptr[ 4]); /*8 */ + MLA(hi, lo, (*fe)[5], eptr[ 3]); /*6 */ + MLA(hi, lo, (*fe)[6], eptr[ 2]); /*4 */ + MLA(hi, lo, (*fe)[7], eptr[ 1]); /*2 */ +#else + ptr=*E0ptr; + ptr=ptr+1; + eptr=*D0optr; + eptr=eptr+1; + + DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p,ptr[0], ptr[14], ptr[12], ptr[10], ptr[8], ptr[6], ptr[4], ptr[2]); + DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p2,eptr[0], eptr[7],eptr[6],eptr[5],eptr[4], eptr[3],eptr[2],eptr[1]); + DEBUGF("D value: %d [%d][%d]\n", ((int)ptr-(int)E)/4, (((int)ptr-(int)E)/4)/32,(((int)ptr-(int)E)/4)%32); + DEBUGF("De value: %d [%d][%d]\n", ((int)eptr-(int)Do)/4, (((int)eptr-(int)Do)/4)/16,(((int)eptr-(int)Do)/4)%16); + if(ptr[14] != eptr[7]) + exit(0); + + MLA(hi, lo, (*fe)[0], ptr[ 0]); /*0 */ + MLA(hi, lo, (*fe)[1], ptr[14]); /*14*/ + MLA(hi, lo, (*fe)[2], ptr[12]); /*12*/ + MLA(hi, lo, (*fe)[3], ptr[ 10]); /*10*/ + MLA(hi, lo, (*fe)[4], ptr[ 8]); /*8 */ + MLA(hi, lo, (*fe)[5], ptr[ 6]); /*6 */ + MLA(hi, lo, (*fe)[6], ptr[ 4]); /*4 */ + MLA(hi, lo, (*fe)[7], ptr[ 2]); /*2 */ +#endif + pcm[-sb] = SHIFT(MLZ(hi, lo)); + + + + //PROD_SB_EVEN_ODD_ONE(hi2, lo2, D1ptr, 0, 30, 15) + #if 1 + + MLA(hi2, lo2, (*fe)[0], ptr2[30]); /*30*/\ + MLA(hi2, lo2, (*fe)[1], ptr2[17]); /*16*/\ + MLA(hi2, lo2, (*fe)[2], ptr2[18]); /*18*/\ + MLA(hi2, lo2, (*fe)[3], ptr2[21]); /*20*/\ + MLA(hi2, lo2, (*fe)[4], ptr2[22]); /*22*/\ + MLA(hi2, lo2, (*fe)[5], ptr2[25]); /*24*/\ + MLA(hi2, lo2, (*fe)[6], ptr2[26]); /*26*/\ + MLA(hi2, lo2, (*fe)[7], ptr2[29]); /*28*/\ + + +#endif + pcm[sb] = SHIFT(MLZ(hi2, lo2)); + } + + +#if 0 + ptr = *(D0ptr + 1); //alignment is p%4, so ptr is 3 aligned + PROD_O_ODD_ODD(hi, lo, fo, ptr, 0) +#else + optr = *(D0optr+1); + + ML0(hi, lo, (*fo)[0], optr[0]); /*0 */ + MLA(hi, lo, (*fo)[1], optr[7]); /*14*/ + MLA(hi, lo, (*fo)[2], optr[6]); /*12*/ + MLA(hi, lo, (*fo)[3], optr[5]); /*10*/ + MLA(hi, lo, (*fo)[4], optr[4]); /*8 */ + MLA(hi, lo, (*fo)[5], optr[3]); /*6 */ + MLA(hi, lo, (*fo)[6], optr[2]); /*4 */ + MLA(hi, lo, (*fo)[7], optr[1]); /*2 */ +#endif + + pcm[0] = SHIFT(-MLZ(hi, lo)); + + break; + + case 1: /*s%4 == 1 and p%4 == 0*/ + ptr = *D0ptr; //alignment is p%4, so ptr is 0 aligned + ptr=ptr+1; //alignment is p%4+1, so ptr is 1 aligned + +#if 0 + PROD_O_ODD_EVEN(hi, lo, fx, ptr, 1) +#else + optr = *D0optr; //alignment is p%4, so ptr is 0 aligned + + ML0(hi, lo, (*fx)[0], optr[0]); /*0 */ + MLA(hi, lo, (*fx)[1], optr[7]); /*14*/ + MLA(hi, lo, (*fx)[2], optr[6]); /*12*/ + MLA(hi, lo, (*fx)[3], optr[5]); /*10*/ + MLA(hi, lo, (*fx)[4], optr[4]); /*8 */ + MLA(hi, lo, (*fx)[5], optr[3]); /*6 */ + MLA(hi, lo, (*fx)[6], optr[2]); /*4 */ + MLA(hi, lo, (*fx)[7], optr[1]); /*2 */ +#endif + + MLN(hi, lo); + ptr=ptr-1; //alignment is p%4, so ptr is 0 aligned +#if 0 + PROD_A_EVEN_EVEN(hi, lo, fe, ptr, 0) +#else + eptr = *D0eptr; + MLA(hi, lo, (*fe)[0], eptr[0]); /*0 */ + MLA(hi, lo, (*fe)[1], eptr[7]); /*14*/ + MLA(hi, lo, (*fe)[2], eptr[6]); /*12*/ + MLA(hi, lo, (*fe)[3], eptr[5]); /*10*/ + MLA(hi, lo, (*fe)[4], eptr[4]); /*8 */ + MLA(hi, lo, (*fe)[5], eptr[3]); /*6 */ + MLA(hi, lo, (*fe)[6], eptr[2]); /*4 */ + MLA(hi, lo, (*fe)[7], eptr[1]); /*2 */ +#endif + + pcm[0] = SHIFT(MLZ(hi, lo)); + pcm += 16; + + for (sb = 15; sb; sb--, fo++) + { + ++fe; + ++D0ptr; + ++D0eptr; + ++D0optr; + ++D1ptr; + ++D1eptr; + ++D1optr; + ++E0ptr; + ++E1ptr; + + /* D[32 - sb][i] == -D[sb][31 - i] */ + ptr = *D0ptr; //alignment is p%4, so ptr is 0 aligned + ptr=ptr+1; //alignment is p%4+1, so ptr is 1 aligned + ptr2 = *D1ptr; //alignment is 4-p%4, so ptr is 0 aligned +#if 0 + PROD_O_ODD_EVEN(hi, lo, fo, ptr, 1) +#else + #if 0 + ML0(hi, lo, (*fo)[0], ptr[ 1]); /*0 */ + MLA(hi, lo, (*fo)[1], ptr[14]); /*14*/ + MLA(hi, lo, (*fo)[2], ptr[13]); /*12*/ + MLA(hi, lo, (*fo)[3], ptr[10]); /*10*/ + MLA(hi, lo, (*fo)[4], ptr[ 9]); /*8 */ + MLA(hi, lo, (*fo)[5], ptr[ 6]); /*6 */ + MLA(hi, lo, (*fo)[6], ptr[ 5]); /*4 */ + MLA(hi, lo, (*fo)[7], ptr[ 2]); /*2 */ + #else + optr = *D0optr; //alignment is p%4, so ptr is 0 aligned + optr=optr+0; //not sure why this ended up being +0 + Eptr = *E0ptr; + Eptr=Eptr+3; + // DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p,Eptr[0], Eptr[14], Eptr[12], Eptr[10], Eptr[8], Eptr[6], Eptr[4], Eptr[2]); + //DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p2,optr[0],optr[7],optr[6],optr[5],optr[4], optr[3],optr[2],optr[1]); + //DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p2,ptr[1],ptr[14],ptr[13],ptr[10],ptr[9], ptr[6],ptr[5],ptr[2]); + if(ptr[9] != optr[4]) + exit(0); + + ML0(hi, lo, (*fo)[0], optr[0]); /*0 */ + MLA(hi, lo, (*fo)[1], optr[7]); /*14*/ + MLA(hi, lo, (*fo)[2], optr[6]); /*12*/ + MLA(hi, lo, (*fo)[3], optr[5]); /*10*/ + MLA(hi, lo, (*fo)[4], optr[4]); /*8 */ + MLA(hi, lo, (*fo)[5], optr[3]); /*6 */ + MLA(hi, lo, (*fo)[6], optr[2]); /*4 */ + MLA(hi, lo, (*fo)[7], optr[1]); /*2 */ + #endif + +#endif +#if 0 + ML0(hi2, lo2, (*fo)[7], ptr2[28]); /*28*/ + MLA(hi2, lo2, (*fo)[6], ptr2[25]); /*26*/ + MLA(hi2, lo2, (*fo)[5], ptr2[24]); /*24*/ + MLA(hi2, lo2, (*fo)[4], ptr2[21]); /*22*/ + MLA(hi2, lo2, (*fo)[3], ptr2[20]); /*20*/ + MLA(hi2, lo2, (*fo)[2], ptr2[17]); /*18*/ + MLA(hi2, lo2, (*fo)[1], ptr2[16]); /*16*/ + MLA(hi2, lo2, (*fo)[0], ptr2[29]); /*30*/ +#else + eptr = *D1eptr; + ML0(hi2, lo2, (*fo)[7], eptr[14]); /*28*/ + MLA(hi2, lo2, (*fo)[6], eptr[13]); /*26*/ + MLA(hi2, lo2, (*fo)[5], eptr[12]); /*24*/ + MLA(hi2, lo2, (*fo)[4], eptr[11]); /*22*/ + MLA(hi2, lo2, (*fo)[3], eptr[10]); /*20*/ + MLA(hi2, lo2, (*fo)[2], eptr[ 9]); /*18*/ + MLA(hi2, lo2, (*fo)[1], eptr[ 8]); /*16*/ + MLA(hi2, lo2, (*fo)[0], eptr[15]); /*30*/ +#endif + MLN(hi, lo); + ptr=ptr-1; //alignment is p%4, so ptr is 1 aligned + #if 0 + PROD_A_EVEN_EVEN(hi, lo, fe, ptr, 0) + #else + #if 0 + MLA(hi, lo, (*fe)[0], ptr[ 0]); /*0 */ + MLA(hi, lo, (*fe)[1], ptr[13]); /*14*/ + MLA(hi, lo, (*fe)[2], ptr[12]); /*12*/ + MLA(hi, lo, (*fe)[3], ptr[ 9]); /*10*/ + MLA(hi, lo, (*fe)[4], ptr[ 8]); /*8 */ + MLA(hi, lo, (*fe)[5], ptr[ 5]); /*6 */ + MLA(hi, lo, (*fe)[6], ptr[ 4]); /*4 */ + MLA(hi, lo, (*fe)[7], ptr[ 1]); /*2 */ + #else + eptr = *D0eptr; + + //DEBUGF("D value: %d [%d][%d]\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32); + //DEBUGF("De value: %d [%d][%d]\n", ((int)eptr-(int)De)/4, (((int)eptr-(int)De)/4)/16,(((int)eptr-(int)De)/4)%16); + + //DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p2,eptr[0],eptr[7],eptr[6],eptr[5],eptr[4], eptr[3],eptr[2],eptr[1]); + //DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p2,ptr[0],ptr[13],ptr[12],ptr[9],ptr[8], ptr[5],ptr[4],ptr[1]); + //exit(0); + MLA(hi, lo, (*fe)[0], eptr[0]); /*0 */ + MLA(hi, lo, (*fe)[1], eptr[7]); /*14*/ + MLA(hi, lo, (*fe)[2], eptr[6]); /*12*/ + MLA(hi, lo, (*fe)[3], eptr[5]); /*10*/ + MLA(hi, lo, (*fe)[4], eptr[4]); /*8 */ + MLA(hi, lo, (*fe)[5], eptr[3]); /*6 */ + MLA(hi, lo, (*fe)[6], eptr[2]); /*4 */ + MLA(hi, lo, (*fe)[7], eptr[1]); /*2 */ + + #endif + +#endif + + pcm[-sb] = SHIFT(MLZ(hi, lo)); + + +#if 0 + PROD_SB_ODD_EVEN_ZERO(hi, lo, ptr, 1, 15, 30) +#else + #if 0 + MLA(hi2, lo2, (*fe)[0], ptr2[15]); /*15*/ + MLA(hi2, lo2, (*fe)[1], ptr2[18]); /*17*/ + MLA(hi2, lo2, (*fe)[2], ptr2[19]); /*19*/ + MLA(hi2, lo2, (*fe)[3], ptr2[22]); /*21*/ + MLA(hi2, lo2, (*fe)[4], ptr2[23]); /*23*/ + MLA(hi2, lo2, (*fe)[5], ptr2[26]); /*25*/ + MLA(hi2, lo2, (*fe)[6], ptr2[27]); /*27*/ + MLA(hi2, lo2, (*fe)[7], ptr2[30]); /*29*/ + #else + optr = *D1optr; + //TODO: double check this one later + //DEBUGF("D value: %d [%d][%d]\n", ((int)ptr2-(int)D)/4, (((int)ptr2-(int)D)/4)/32,(((int)ptr2-(int)D)/4)%32); + //DEBUGF("De value: %d [%d][%d]\n", ((int)eptr-(int)De)/4, (((int)eptr-(int)De)/4)/16,(((int)eptr-(int)De)/4)%16); + //DEBUGF("Do value: %d [%d][%d]\n", ((int)optr-(int)Do)/4, (((int)optr-(int)Do)/4)/16,(((int)optr-(int)Do)/4)%16); + + + MLA(hi2, lo2, (*fe)[0], optr[7]); /*15*/ + MLA(hi2, lo2, (*fe)[1], optr[8]); /*17*/ + MLA(hi2, lo2, (*fe)[2], optr[9]); /*19*/ + MLA(hi2, lo2, (*fe)[3], optr[10]); /*21*/ + MLA(hi2, lo2, (*fe)[4], optr[11]); /*23*/ + MLA(hi2, lo2, (*fe)[5], optr[12]); /*25*/ + MLA(hi2, lo2, (*fe)[6], optr[13]); /*27*/ + MLA(hi2, lo2, (*fe)[7], optr[14]); /*29*/ + #endif +#endif + + pcm[sb] = SHIFT(MLZ(hi2, lo2)); + } + + ptr = *(D0ptr + 1)+1; //alignment is p%4+1, so ptr is 1 aligned + +#if 0 + PROD_O_ODD_EVEN(hi, lo, fo, ptr, 1) +#else + optr = *(D0optr+1); + ML0(hi, lo, (*fo)[0], optr[0]); /*0 */ + MLA(hi, lo, (*fo)[1], optr[7]); /*14*/ + MLA(hi, lo, (*fo)[2], optr[6]); /*12*/ + MLA(hi, lo, (*fo)[3], optr[5]); /*10*/ + MLA(hi, lo, (*fo)[4], optr[4]); /*8 */ + MLA(hi, lo, (*fo)[5], optr[3]); /*6 */ + MLA(hi, lo, (*fo)[6], optr[2]); /*4 */ + MLA(hi, lo, (*fo)[7], optr[1]); /*2 */ +#endif + pcm[0] = SHIFT(-MLZ(hi, lo)); + break; + + case 2: /*s%4 == 2 and p%4 == 1*/ + ptr = *D0ptr; //alignment is p%4, so ptr is 1 aligned +#if 0 + PROD_O_ODD_EVEN(hi, lo, fx, ptr, 0) +#else + optr = *D0optr; + ML0(hi, lo, (*fx)[0], optr[0]); /*0 */\ + MLA(hi, lo, (*fx)[1], optr[7]); /*14*/\ + MLA(hi, lo, (*fx)[2], optr[6]); /*12*/\ + MLA(hi, lo, (*fx)[3], optr[5]); /*10*/\ + MLA(hi, lo, (*fx)[4], optr[4]); /*8 */\ + MLA(hi, lo, (*fx)[5], optr[3]); /*6 */\ + MLA(hi, lo, (*fx)[6], optr[2]); /*4 */\ + MLA(hi, lo, (*fx)[7], optr[1]); /*2 */ +#endif + MLN(hi, lo); + ptr=ptr+1; //alignment is p%4+1, so ptr is 2 aligned +#if 0 + PROD_A_EVEN_ODD(hi, lo, fe, ptr, 1) +#else + eptr = *D0eptr; + eptr = eptr+1; + MLA(hi, lo, (*fe)[0], eptr[0]); /*0 */\ + MLA(hi, lo, (*fe)[1], eptr[7]); /*14*/\ + MLA(hi, lo, (*fe)[2], eptr[6]); /*12*/\ + MLA(hi, lo, (*fe)[3], eptr[5]); /*10*/\ + MLA(hi, lo, (*fe)[4], eptr[4]); /*8 */\ + MLA(hi, lo, (*fe)[5], eptr[3]); /*6 */\ + MLA(hi, lo, (*fe)[6], eptr[2]); /*4 */\ + MLA(hi, lo, (*fe)[7], eptr[1]); /*2 */ +#endif + pcm[0] = SHIFT(MLZ(hi, lo)); + pcm += 16; + + for (sb = 15; sb; sb--, fo++) + { + ++fe; + ++D0ptr; + ++D0eptr; + ++D0optr; + ++D1ptr; + ++D1eptr; + ++D1optr; + ++E0ptr; + ++E1ptr; + + /* D[32 - sb][i] == -D[sb][31 - i] */ + ptr = *D0ptr; //alignment is p%4, so ptr is 1 aligned +#if 0 + PROD_O_ODD_EVEN(hi, lo, fo, ptr, 0) +#else + optr = *D0optr; + optr = optr; + //DEBUGF("D value: %d [%d][%d]\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32); + //DEBUGF("De value: %d [%d][%d]\n", ((int)eptr-(int)De)/4, (((int)eptr-(int)De)/4)/16,(((int)eptr-(int)De)/4)%16); + //DEBUGF("Do value: %d [%d][%d]\n", ((int)optr-(int)Do)/4, (((int)optr-(int)Do)/4)/16,(((int)optr-(int)Do)/4)%16); + ML0(hi, lo, (*fo)[0], optr[0]); /*0 */\ + MLA(hi, lo, (*fo)[1], optr[7]); /*14*/\ + MLA(hi, lo, (*fo)[2], optr[6]); /*12*/\ + MLA(hi, lo, (*fo)[3], optr[5]); /*10*/\ + MLA(hi, lo, (*fo)[4], optr[4]); /*8 */\ + MLA(hi, lo, (*fo)[5], optr[3]); /*6 */\ + MLA(hi, lo, (*fo)[6], optr[2]); /*4 */\ + MLA(hi, lo, (*fo)[7], optr[1]); /*2 */ +#endif + + MLN(hi, lo); + ptr=ptr+1; //alignment is p%4+1, so ptr is 2 aligned +#if 0 + PROD_A_EVEN_ODD(hi, lo, fe, ptr, 1) +#else + eptr = *D0eptr; + eptr = eptr+1; + // DEBUGF("D value: %d [%d][%d]\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32); + // DEBUGF("De value: %d [%d][%d]\n", ((int)eptr-(int)De)/4, (((int)eptr-(int)De)/4)/16,(((int)eptr-(int)De)/4)%16); + // DEBUGF("Do value: %d [%d][%d]\n", ((int)optr-(int)Do)/4, (((int)optr-(int)Do)/4)/16,(((int)optr-(int)Do)/4)%16); + MLA(hi, lo, (*fe)[0], eptr[0]); /*0 */\ + MLA(hi, lo, (*fe)[1], eptr[7]); /*14*/\ + MLA(hi, lo, (*fe)[2], eptr[6]); /*12*/\ + MLA(hi, lo, (*fe)[3], eptr[5]); /*10*/\ + MLA(hi, lo, (*fe)[4], eptr[4]); /*8 */\ + MLA(hi, lo, (*fe)[5], eptr[3]); /*6 */\ + MLA(hi, lo, (*fe)[6], eptr[2]); /*4 */\ + MLA(hi, lo, (*fe)[7], eptr[1]); /*2 */ +#endif + + pcm[-sb] = SHIFT(MLZ(hi, lo)); + + ptr = *D1ptr; //alignment is 4-p%4, so ptry is 3 aligned +#if 0 + PROD_SB_EVEN_ODD_THREE(hi, lo, ptr, 0, 30, 15) +#else + + ptr2 = *D1optr; + ptr2=ptr2-1; + + //DEBUGF("D value: %d [%d][%d]\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32); + //DEBUGF("De value: %d [%d][%d]\n", ((int)eptr-(int)De)/4, (((int)eptr-(int)De)/4)/16,(((int)eptr-(int)De)/4)%16); + //DEBUGF("Do value: %d [%d][%d]\n", ((int)ptr2-(int)Do)/4, (((int)ptr2-(int)Do)/4)/16,(((int)ptr2-(int)Do)/4)%16); + + //DEBUGF("%d %d: ",s,p2); + //for(i=15; i>0; i--) + // DEBUGF("%x ",ptr2[i]); + //DEBUGF("@\n"); + + //DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p2,ptr2[15],ptr2[8],ptr2[9],ptr2[10],ptr2[11], ptr2[12],ptr2[13],ptr2[14]); + //DEBUGF("%d %d: %x %x %x %x %x %x %x %x\n",s,p2,ptr[31],ptr[16],ptr[19],ptr[20],ptr[23], ptr[24],ptr[27],ptr[28]); + //exit(0); + ML0(hi, lo, (*fe)[0], ptr2[15]); /*30*/\ + MLA(hi, lo, (*fe)[1], ptr2[8]); /*16*/\ + MLA(hi, lo, (*fe)[2], ptr2[9]); /*18*/\ + MLA(hi, lo, (*fe)[3], ptr2[10]); /*20*/\ + MLA(hi, lo, (*fe)[4], ptr2[11]); /*22*/\ + MLA(hi, lo, (*fe)[5], ptr2[12]); /*24*/\ + MLA(hi, lo, (*fe)[6], ptr2[13]); /*26*/\ + MLA(hi, lo, (*fe)[7], ptr2[14]); /*28*/\ + ptr2=*D1eptr; + MLA(hi, lo, (*fo)[7], ptr2[14]); /*29*/\ + MLA(hi, lo, (*fo)[6], ptr2[13]); /*27*/\ + MLA(hi, lo, (*fo)[5], ptr2[12]); /*25*/\ + MLA(hi, lo, (*fo)[4], ptr2[11]); /*23*/\ + MLA(hi, lo, (*fo)[3], ptr2[10]); /*21*/\ + MLA(hi, lo, (*fo)[2], ptr2[ 9]); /*19*/\ + MLA(hi, lo, (*fo)[1], ptr2[ 8]); /*17*/\ + MLA(hi, lo, (*fo)[0], ptr2[ 7]); /*15*/ +#endif + pcm[sb] = SHIFT(MLZ(hi, lo)); + } + + ptr = *(D0ptr + 1); //alignment is p%4, so ptr is 1 aligned + +#if 0 + PROD_O_ODD_EVEN(hi, lo, fo, ptr, 0) +#else + optr = *(D0optr+1); + ML0(hi, lo, (*fo)[0], optr[0]); /*0 */\ + MLA(hi, lo, (*fo)[1], optr[7]); /*14*/\ + MLA(hi, lo, (*fo)[2], optr[6]); /*12*/\ + MLA(hi, lo, (*fo)[3], optr[5]); /*10*/\ + MLA(hi, lo, (*fo)[4], optr[4]); /*8 */\ + MLA(hi, lo, (*fo)[5], optr[3]); /*6 */\ + MLA(hi, lo, (*fo)[6], optr[2]); /*4 */\ + MLA(hi, lo, (*fo)[7], optr[1]); /*2 */ +#endif + + pcm[0] = SHIFT(-MLZ(hi, lo)); + + break; + + case 3: + ptr = *D0ptr+1; //alignment is p%4+1, so ptr is 3 aligned +#if 0 + PROD_O_ODD_ODD(hi, lo, fx, ptr, 1) +#else + optr = *D0optr; + ML0(hi, lo, (*fx)[0], optr[0]); /*0 */\ + MLA(hi, lo, (*fx)[1], optr[7]); /*14*/\ + MLA(hi, lo, (*fx)[2], optr[6]); /*12*/\ + MLA(hi, lo, (*fx)[3], optr[5]); /*10*/\ + MLA(hi, lo, (*fx)[4], optr[4]); /*8 */\ + MLA(hi, lo, (*fx)[5], optr[3]); /*6 */\ + MLA(hi, lo, (*fx)[6], optr[2]); /*4 */\ + MLA(hi, lo, (*fx)[7], optr[1]); /*2 */ +#endif + + MLN(hi, lo); + ptr=ptr-1; //alignment is p%4, so ptr is 2 aligned +#if 0 + PROD_A_EVEN_ODD(hi, lo, fe, ptr, 0) +#else + eptr= *D0eptr; + MLA(hi, lo, (*fe)[0], eptr[0]); /*0 */\ + MLA(hi, lo, (*fe)[1], eptr[7]); /*14*/\ + MLA(hi, lo, (*fe)[2], eptr[6]); /*12*/\ + MLA(hi, lo, (*fe)[3], eptr[5]); /*10*/\ + MLA(hi, lo, (*fe)[4], eptr[4]); /*8 */\ + MLA(hi, lo, (*fe)[5], eptr[3]); /*6 */\ + MLA(hi, lo, (*fe)[6], eptr[2]); /*4 */\ + MLA(hi, lo, (*fe)[7], eptr[1]); /*2 */ +#endif + pcm[0] = SHIFT(MLZ(hi, lo)); + pcm += 16; + + for (sb = 15; sb; sb--, fo++) + { + ++fe; + ++D0ptr; + ++D0eptr; + ++D0optr; + ++D1ptr; + ++D1eptr; + ++D1optr; + ++E0ptr; + ++E1ptr; + + + /* D[32 - sb][i] == -D[sb][31 - i] */ + ptr = *D0ptr+1; //alignment is p%4+1, so ptr is 3 aligned +#if 0 + PROD_O_ODD_ODD(hi, lo, fo, ptr, 1) +#else + optr = *D0optr; + ML0(hi, lo, (*fo)[0], optr[0]); /*0 */\ + MLA(hi, lo, (*fo)[1], optr[7]); /*14*/\ + MLA(hi, lo, (*fo)[2], optr[6]); /*12*/\ + MLA(hi, lo, (*fo)[3], optr[5]); /*10*/\ + MLA(hi, lo, (*fo)[4], optr[4]); /*8 */\ + MLA(hi, lo, (*fo)[5], optr[3]); /*6 */\ + MLA(hi, lo, (*fo)[6], optr[2]); /*4 */\ + MLA(hi, lo, (*fo)[7], optr[1]); /*2 */ +#endif + + MLN(hi, lo); + ptr=ptr-1; //alignment is p%4, so ptr is 2 aligned + +#if 0 + PROD_A_EVEN_ODD(hi, lo, fe, ptr, 0) +#else + eptr= *D0eptr; + MLA(hi, lo, (*fe)[0], eptr[0]); /*0 */\ + MLA(hi, lo, (*fe)[1], eptr[7]); /*14*/\ + MLA(hi, lo, (*fe)[2], eptr[6]); /*12*/\ + MLA(hi, lo, (*fe)[3], eptr[5]); /*10*/\ + MLA(hi, lo, (*fe)[4], eptr[4]); /*8 */\ + MLA(hi, lo, (*fe)[5], eptr[3]); /*6 */\ + MLA(hi, lo, (*fe)[6], eptr[2]); /*4 */\ + MLA(hi, lo, (*fe)[7], eptr[1]); /*2 */ +#endif + + pcm[-sb] = SHIFT(MLZ(hi, lo)); + + ptr = *D1ptr; //alignment is 4-p%4, so ptry is 2 aligned + +#if 0 + //PROD_SB_ODD_EVEN_TWO(hi, lo, ptr, 1, 15, 30) + ML0(hi, lo, (*fe)[0], ptr[16]); /*15*/\ + MLA(hi, lo, (*fe)[1], ptr[17]); /*17*/\ + MLA(hi, lo, (*fe)[2], ptr[20]); /*19*/\ + MLA(hi, lo, (*fe)[3], ptr[21]); /*21*/\ + MLA(hi, lo, (*fe)[4], ptr[24]); /*23*/\ + MLA(hi, lo, (*fe)[5], ptr[25]); /*25*/\ + MLA(hi, lo, (*fe)[6], ptr[28]); /*27*/\ + MLA(hi, lo, (*fe)[7], ptr[29]); /*29*/\ + + MLA(hi, lo, (*fo)[7], ptr[27]); /*28*/\ + MLA(hi, lo, (*fo)[6], ptr[26]); /*26*/\ + MLA(hi, lo, (*fo)[5], ptr[23]); /*24*/\ + MLA(hi, lo, (*fo)[4], ptr[22]); /*22*/\ + MLA(hi, lo, (*fo)[3], ptr[19]); /*20*/\ + MLA(hi, lo, (*fo)[2], ptr[18]); /*18*/\ + MLA(hi, lo, (*fo)[1], ptr[15]); /*16*/\ + MLA(hi, lo, (*fo)[0], ptr[30]); /*30*/ +#else + ptr2 = *D1optr; + ptr2=ptr2; + ML0(hi, lo, (*fe)[0], ptr2[7]); /*15*/\ + MLA(hi, lo, (*fe)[1], ptr2[8]); /*17*/\ + MLA(hi, lo, (*fe)[2], ptr2[9]); /*19*/\ + MLA(hi, lo, (*fe)[3], ptr2[10]); /*21*/\ + MLA(hi, lo, (*fe)[4], ptr2[11]); /*23*/\ + MLA(hi, lo, (*fe)[5], ptr2[12]); /*25*/\ + MLA(hi, lo, (*fe)[6], ptr2[13]); /*27*/\ + MLA(hi, lo, (*fe)[7], ptr2[14]); /*29*/\ + ptr2=*D1eptr; + MLA(hi, lo, (*fo)[7], ptr2[14]); /*28*/\ + MLA(hi, lo, (*fo)[6], ptr2[13]); /*26*/\ + MLA(hi, lo, (*fo)[5], ptr2[12]); /*24*/\ + MLA(hi, lo, (*fo)[4], ptr2[11]); /*22*/\ + MLA(hi, lo, (*fo)[3], ptr2[10]); /*20*/\ + MLA(hi, lo, (*fo)[2], ptr2[ 9]); /*18*/\ + MLA(hi, lo, (*fo)[1], ptr2[ 8]); /*16*/\ + MLA(hi, lo, (*fo)[0], ptr2[15]); /*30*/ + +#endif + + pcm[sb] = SHIFT(MLZ(hi, lo)); + } + + ptr = *(D0ptr + 1)+1; //alignment is p%4+1, so ptr is 3 aligned +#if 0 + PROD_O_ODD_ODD(hi, lo, fo, ptr, 1) +#else + optr = *(D0optr+1); + ML0(hi, lo, (*fo)[0], optr[0]); /*0 */\ + MLA(hi, lo, (*fo)[1], optr[7]); /*14*/\ + MLA(hi, lo, (*fo)[2], optr[6]); /*12*/\ + MLA(hi, lo, (*fo)[3], optr[5]); /*10*/\ + MLA(hi, lo, (*fo)[4], optr[4]); /*8 */\ + MLA(hi, lo, (*fo)[5], optr[3]); /*6 */\ + MLA(hi, lo, (*fo)[6], optr[2]); /*4 */\ + MLA(hi, lo, (*fo)[7], optr[1]); /*2 */ +#endif + pcm[0] = SHIFT(-MLZ(hi, lo)); + break; + } + + pcm += 16; phase = (phase + 1) % 16; + } + } + } # endif /* FPM_COLDFIRE_EMAC, FPM_ARM */ @@ -1095,6 +1943,7 @@ Dptr = &D[0]; ptr = *Dptr + po; + ML0(hi, lo, (*fx)[0], ptr[ 0]); MLA(hi, lo, (*fx)[1], ptr[14]); MLA(hi, lo, (*fx)[2], ptr[12]);