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,544 @@ + { 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/synth.c =================================================================== --- ../apps/codecs/libmad/synth.c (revision 28580) +++ ../apps/codecs/libmad/synth.c (working copy) @@ -535,7 +535,7 @@ static mad_fixed_t const D[17][32] ICONST_ATTR = { -# include "D.dat" +# include "D_sort.dat" }; /* @@ -913,8 +913,314 @@ } # else /* not FPM_COLDFIRE_EMAC and not FPM_ARM */ +/* +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). + +*/ +#define X 0 +#define Y 1 +//case where ptr is evenly divided by 2 twice (e.g. (ptr/4) % 4 == 0) +#define PROD_O_EVEN_EVEN(hi, lo, f, ptr, offset) \ + if(Y)DEBUGF("PROD_O_EVEN_EVEN : %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset); \ + if((((int)ptr-(int)D)/4)%4!=0) exit(0); \ + ML0(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_O_EVEN_ODD(hi, lo, f, ptr, offset) \ + if(Y)DEBUGF("PROD_O_EVEN_ODD : %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset); \ + if((((int)ptr-(int)D)/4)%4!=2) exit(0); \ + ML0(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*/ + +//case where (ptr/4)%4 = 1 (simple odd) +#define PROD_O_ODD_EVEN(hi, lo, f, ptr, offset) \ + if(Y)DEBUGF("PROD_O_ODD_EVEN : %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset); \ + if((((int)ptr-(int)D)/4)%4!=1) exit(0); \ + 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) \ + if(Y)DEBUGF("PROD_O_ODD_ODD : %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset); \ + if((((int)ptr-(int)D)/4)%4!=3) exit(0); \ + 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) \ + /*DEBUGF("PROD_A_EVEN_EVEN : %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset);*/\ + if((((int)ptr-(int)D)/4)%4!=0) exit(0); \ + 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) \ + /*DEBUGF("PROD_A_EVEN_ODD : %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset);*/\ + if((((int)ptr-(int)D)/4)%4!=2) exit(0); \ + 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*/ + +//case where (ptr/4)%4 = 1 (simple odd) +#define PROD_A_ODD_EVEN(hi, lo, f, ptr, offset) \ + /*DEBUGF("PROD_A_ODD_EVEN : %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset);*/ \ + if((((int)ptr-(int)D)/4)%4!=1) exit(0); \ + MLA(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_A_ODD_ODD(hi, lo, f, ptr, offset) \ + if((((int)ptr-(int)D)/4)%4!=3) exit(0); \ + MLA(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 "EVEN_ODD" SB synthesis functions -Note that ptr is ALWAYS odd index aligned for EVEN_ODD case */ + +//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) \ + if(Y)DEBUGF("PROD_SB_EVEN_ODD_ONE: %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset); \ + if((((int)ptr-(int)D)/4)%4!=1) exit(0); \ + 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) \ + if(Y)DEBUGF("PROD_SB_EVEN_ODD_THREE: %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset); \ + if((((int)ptr-(int)D)/4)%4!=3) exit(0); \ + 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[30]); /*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) \ + if(Y)DEBUGF("PROD_SB_ODD_EVEN_ZERO: %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset);\ + if((((int)ptr-(int)D)/4)%4!=0) exit(0); \ + 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) \ + if(Y)DEBUGF("PROD_SB_ODD_EVEN_TWO: %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset);\ + if((((int)ptr-(int)D)/4)%4!=2) exit(0); \ + 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*/; + + + +/*simple even/odd split*/ + + +//case where offset = 0 +#define PROD_O_EVEN(hi, lo, f, ptr, offset) \ + /*DEBUGF("PROD_O_EVEN : %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset);*/\ + ML0(hi, lo, (*f)[0], ptr[ 0]); \ + MLA(hi, lo, (*f)[1], ptr[14]); \ + MLA(hi, lo, (*f)[2], ptr[12]); \ + MLA(hi, lo, (*f)[3], ptr[10]); \ + MLA(hi, lo, (*f)[4], ptr[ 8]); \ + MLA(hi, lo, (*f)[5], ptr[ 6]); \ + MLA(hi, lo, (*f)[6], ptr[ 4]); \ + MLA(hi, lo, (*f)[7], ptr[ 2]); + +//case where offset = 1 +#define PROD_O_ODD(hi, lo, f, ptr, offset) \ + /*DEBUGF("PROD_O_ODD : %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset);*/\ + ML0(hi, lo, (*f)[0], ptr[ 1]); \ + MLA(hi, lo, (*f)[1], ptr[15]); \ + MLA(hi, lo, (*f)[2], ptr[13]); \ + MLA(hi, lo, (*f)[3], ptr[11]); \ + MLA(hi, lo, (*f)[4], ptr[ 9]); \ + MLA(hi, lo, (*f)[5], ptr[ 7]); \ + MLA(hi, lo, (*f)[6], ptr[ 5]); \ + MLA(hi, lo, (*f)[7], ptr[ 3]); + +//case where offset = 0 +#define PROD_A_EVEN(hi, lo, f, ptr, offset) \ + /*DEBUGF("PROD_A_EVEN : %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset);*/ \ + MLA(hi, lo, (*f)[0], ptr[ 0]); \ + MLA(hi, lo, (*f)[1], ptr[14]); \ + MLA(hi, lo, (*f)[2], ptr[12]); \ + MLA(hi, lo, (*f)[3], ptr[10]); \ + MLA(hi, lo, (*f)[4], ptr[ 8]); \ + MLA(hi, lo, (*f)[5], ptr[ 6]); \ + MLA(hi, lo, (*f)[6], ptr[ 4]); \ + MLA(hi, lo, (*f)[7], ptr[ 2]); + +//case where offset = 1 +#define PROD_A_ODD(hi, lo, f, ptr, offset) \ + /*DEBUGF("PROD_A_ODD : %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset);*/ \ + MLA(hi, lo, (*f)[0], ptr[ 1]); \ + MLA(hi, lo, (*f)[1], ptr[15]); \ + MLA(hi, lo, (*f)[2], ptr[13]); \ + MLA(hi, lo, (*f)[3], ptr[11]); \ + MLA(hi, lo, (*f)[4], ptr[ 9]); \ + MLA(hi, lo, (*f)[5], ptr[ 7]); \ + MLA(hi, lo, (*f)[6], ptr[ 5]); \ + MLA(hi, lo, (*f)[7], ptr[ 3]); + +//case where offset = 0 and even values come first +#define PROD_SB_EVEN_ODD(hi, lo, ptr, offset, first_idx, last_idx) \ + /*DEBUGF("PROD_SB_EVEN_ODD: %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset);*/ \ + ML0(hi, lo, (*fe)[0], ptr[first_idx]); \ + MLA(hi, lo, (*fe)[1], ptr[16]); \ + MLA(hi, lo, (*fe)[2], ptr[18]); \ + MLA(hi, lo, (*fe)[3], ptr[20]); \ + MLA(hi, lo, (*fe)[4], ptr[22]); \ + MLA(hi, lo, (*fe)[5], ptr[24]); \ + MLA(hi, lo, (*fe)[6], ptr[26]); \ + MLA(hi, lo, (*fe)[7], ptr[28]); \ + MLA(hi, lo, (*fo)[7], ptr[29]); \ + MLA(hi, lo, (*fo)[6], ptr[27]); \ + MLA(hi, lo, (*fo)[5], ptr[25]); \ + MLA(hi, lo, (*fo)[4], ptr[23]); \ + MLA(hi, lo, (*fo)[3], ptr[21]); \ + MLA(hi, lo, (*fo)[2], ptr[19]); \ + MLA(hi, lo, (*fo)[1], ptr[17]); \ + MLA(hi, lo, (*fo)[0], ptr[last_idx ]); + +//case where offset = 1 and odd values come first + +#define PROD_SB_ODD_EVEN(hi, lo, ptr, offset, first_idx, last_idx) \ + /*DEBUGF("PROD_SB_ODD_EVEN: %d [%d][%d], %d offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4, offset);*/\ + ML0(hi, lo, (*fe)[0], ptr[first_idx]); \ + MLA(hi, lo, (*fe)[1], ptr[17]); \ + MLA(hi, lo, (*fe)[2], ptr[19]); \ + MLA(hi, lo, (*fe)[3], ptr[21]); \ + MLA(hi, lo, (*fe)[4], ptr[23]); \ + MLA(hi, lo, (*fe)[5], ptr[25]); \ + MLA(hi, lo, (*fe)[6], ptr[27]); \ + MLA(hi, lo, (*fe)[7], ptr[29]); \ + MLA(hi, lo, (*fo)[7], ptr[28]); \ + MLA(hi, lo, (*fo)[6], ptr[26]); \ + MLA(hi, lo, (*fo)[5], ptr[24]); \ + MLA(hi, lo, (*fo)[4], ptr[22]); \ + MLA(hi, lo, (*fo)[3], ptr[20]); \ + MLA(hi, lo, (*fo)[2], ptr[18]); \ + MLA(hi, lo, (*fo)[1], ptr[16]); \ + MLA(hi, lo, (*fo)[0], ptr[last_idx ]); + + + + + #define PROD_O(hi, lo, f, ptr, offset) \ +/*DEBUGF("D value: %d [%d][%d] offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, 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]); \ @@ -925,6 +1231,7 @@ MLA(hi, lo, (*f)[7], ptr[ 2+offset]); #define PROD_A(hi, lo, f, ptr, offset) \ +/*DEBUGF("D value: %d [%d][%d] offset: %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, 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]); \ @@ -935,6 +1242,7 @@ MLA(hi, lo, (*f)[7], ptr[ 2+offset]); #define PROD_SB(hi, lo, ptr, offset, first_idx, last_idx) \ +/*DEBUGF("D value: %d [%d][%d] offset: %d!\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, offset);*/ \ ML0(hi, lo, (*fe)[0], ptr[first_idx]); \ MLA(hi, lo, (*fe)[1], ptr[16+offset]); \ MLA(hi, lo, (*fe)[2], ptr[18+offset]); \ @@ -952,6 +1260,7 @@ MLA(hi, lo, (*fo)[1], ptr[17-offset]); \ MLA(hi, lo, (*fo)[0], ptr[last_idx ]); + static void synth_full(struct mad_synth *synth, struct mad_frame const *frame, unsigned int nch, unsigned int ns) @@ -973,86 +1282,211 @@ 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... + 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]; //16x32 D1ptr = (void*)&D[0][-p]; + - 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; + 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(X)DEBUGF("TOP ZERO : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); - for (sb = 15; sb; sb--, fo++) - { - ++fe; - ++D0ptr; - ++D1ptr; + PROD_O_ODD_ODD(hi, lo, fx, ptr, 0) //PROD_O(hi, lo, fx, ptr, 0) + + MLN(hi, lo); + ptr=ptr+1; //alignment is p%4+1, so ptr is 0 aligned + PROD_A_EVEN_EVEN(hi, lo, fe, ptr, 1) //PROD_A(hi, lo, fe, ptr, 1) + pcm[0] = SHIFT(MLZ(hi, lo)); + pcm += 16; - /* 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)); + for (sb = 15; sb; sb--, fo++) + { + ++fe; + ++D0ptr; + ++D1ptr; - ptr = *D1ptr; - PROD_SB(hi, lo, ptr, 1, 15, 30) - 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 + if(X)DEBUGF("LOOP ZERO : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + PROD_O_ODD_ODD(hi, lo, fo, ptr, 0) //PROD_O(hi, lo, fo, ptr, 0) - 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; + MLN(hi, lo); + + ptr=ptr+1; //alignement is p%4+1, so ptr is 0 aligned + PROD_A_EVEN_EVEN(hi, lo, fe, ptr, 1) //PROD_A(hi, lo, fe, ptr, 1) - for (sb = 15; sb; sb--, fo++) - { - ++fe; - ++D0ptr; - ++D1ptr; + pcm[-sb] = SHIFT(MLZ(hi, lo)); - /* 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)); + ptr = *D1ptr; //alignment is 4-p%4, so ptr is 1 aligned + if(X)DEBUGF("LOOP_SB ZERO : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); - ptr = *D1ptr; - PROD_SB(hi, lo, ptr, 0, 30, 15) - pcm[sb] = SHIFT(MLZ(hi, lo)); - } + PROD_SB_EVEN_ODD_ONE(hi, lo, ptr, 0, 30, 15) //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)); - } + ptr = *(D0ptr + 1); //alignment is p%4, so ptr is 3 aligned + PROD_O_ODD_ODD(hi, lo, fo, ptr, 0) //PROD_O(hi, lo, fo, ptr, 0) + + if(X)DEBUGF("END EVEN : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + 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 + if(X) DEBUGF("TOP ODD : %d [%d][%d], %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + ptr=ptr+1; //alignment is p%4+1, so ptr is 1 aligned + PROD_O_ODD_EVEN(hi, lo, fx, ptr, 1) //PROD_O(hi, lo, fx, ptr, 1) + + MLN(hi, lo); + ptr=ptr-1; //alignment is p%4, so ptr is 0 aligned + PROD_A_EVEN_EVEN(hi, lo, fe, ptr, 0) //PROD_A(hi, lo, fe, ptr, 0) + + pcm[0] = SHIFT(MLZ(hi, lo)); + pcm += 16; + + for (sb = 15; sb; sb--, fo++) + { + ++fe; + ++D0ptr; + ++D1ptr; + + /* D[32 - sb][i] == -D[sb][31 - i] */ + ptr = *D0ptr; //alignment is p%4, so ptr is 0 aligned + if(X)DEBUGF("LOOP ODD : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + ptr=ptr+1; //alignment is p%4+1, so ptr is 1 aligned + PROD_O_ODD_EVEN(hi, lo, fo, ptr, 1) + + MLN(hi, lo); + ptr=ptr-1; //alignment is p%4, so ptr is 1 aligned + PROD_A_EVEN_EVEN(hi, lo, fe, ptr, 0) + + pcm[-sb] = SHIFT(MLZ(hi, lo)); + + ptr = *D1ptr; //alignment is 4-p%4, so ptr is 0 aligned + if(X)DEBUGF("LOOP_SB ODD : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + PROD_SB_ODD_EVEN_ZERO(hi, lo, ptr, 1, 15, 30) + + pcm[sb] = SHIFT(MLZ(hi, lo)); + } + + ptr = *(D0ptr + 1)+1; //alignment is p%4+1, so ptr is 1 aligned + + PROD_O_ODD_EVEN(hi, lo, fo, ptr, 1) + if(X)DEBUGF("END ODD : %d [%d][%d], %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + 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(X)DEBUGF("TOP EVEN : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + + PROD_O_ODD_EVEN(hi, lo, fx, ptr, 0) + MLN(hi, lo); + ptr=ptr+1; //alignment is p%4+1, so ptr is 2 aligned + PROD_A_EVEN_ODD(hi, lo, fe, ptr, 1) + pcm[0] = SHIFT(MLZ(hi, lo)); + pcm += 16; + + for (sb = 15; sb; sb--, fo++) + { + ++fe; + ++D0ptr; + ++D1ptr; + + /* D[32 - sb][i] == -D[sb][31 - i] */ + ptr = *D0ptr; //alignment is p%4, so ptr is 1 aligned + if(X)DEBUGF("LOOP EVEN : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + PROD_O_ODD_EVEN(hi, lo, fo, ptr, 0) + + MLN(hi, lo); + ptr=ptr+1; //alignment is p%4+1, so ptr is 2 aligned + PROD_A_EVEN_ODD(hi, lo, fe, ptr, 1) + + pcm[-sb] = SHIFT(MLZ(hi, lo)); + + ptr = *D1ptr; //alignment is 4-p%4, so ptry is 3 aligned + if(X)DEBUGF("LOOP_SB EVEN : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + + PROD_SB_EVEN_ODD_THREE(hi, lo, ptr, 0, 30, 15) + pcm[sb] = SHIFT(MLZ(hi, lo)); + } + + ptr = *(D0ptr + 1); //alignment is p%4, so ptr is 1 aligned + + PROD_O_ODD_EVEN(hi, lo, fo, ptr, 0) + + if(X)DEBUGF("END EVEN : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + pcm[0] = SHIFT(-MLZ(hi, lo)); + + break; + + case 3: + ptr = *D0ptr+1; //alignment is p%4+1, so ptr is 3 aligned + if(X) DEBUGF("TOP ODD : %d [%d][%d], %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + PROD_O_ODD_ODD(hi, lo, fx, ptr, 1) + + MLN(hi, lo); + ptr=ptr-1; //alignment is p%4, so ptr is 2 aligned + PROD_A_EVEN_ODD(hi, lo, fe, ptr, 0) + + pcm[0] = SHIFT(MLZ(hi, lo)); + pcm += 16; + + for (sb = 15; sb; sb--, fo++) + { + ++fe; + ++D0ptr; + ++D1ptr; + + /* D[32 - sb][i] == -D[sb][31 - i] */ + ptr = *D0ptr+1; //alignment is p%4+1, so ptr is 3 aligned + if(X)DEBUGF("LOOP ODD : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + PROD_O_ODD_ODD(hi, lo, fo, ptr, 1) + + MLN(hi, lo); + ptr=ptr-1; //alignment is p%4, so ptr is 2 aligned + PROD_A_EVEN_ODD(hi, lo, fe, ptr, 0) + + pcm[-sb] = SHIFT(MLZ(hi, lo)); + + ptr = *D1ptr; //alignment is 4-p%4, so ptry is 2 aligned + if(X)DEBUGF("LOOP_SB ODD : %d [%d][%d], %d \n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + PROD_SB_ODD_EVEN_TWO(hi, lo, ptr, 1, 15, 30) + + pcm[sb] = SHIFT(MLZ(hi, lo)); + } + + ptr = *(D0ptr + 1)+1; //alignment is p%4+1, so ptr is 3 aligned + + PROD_O_ODD_ODD(hi, lo, fo, ptr, 1) + if(X)DEBUGF("END ODD : %d [%d][%d], %d\n", ((int)ptr-(int)D)/4, (((int)ptr-(int)D)/4)/32,(((int)ptr-(int)D)/4)%32, (((int)ptr-(int)D)/4)%4); + pcm[0] = SHIFT(-MLZ(hi, lo)); + break; + } + + pcm += 16; phase = (phase + 1) % 16; + } + DEBUGF("time to die...\n"); +exit(0); } + } # endif /* FPM_COLDFIRE_EMAC, FPM_ARM */ @@ -1095,6 +1529,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]);