summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/mp3_encoder.c294
1 files changed, 143 insertions, 151 deletions
diff --git a/apps/plugins/mp3_encoder.c b/apps/plugins/mp3_encoder.c
index 813302a9e4..0171bc4d79 100644
--- a/apps/plugins/mp3_encoder.c
+++ b/apps/plugins/mp3_encoder.c
@@ -34,13 +34,6 @@
34enum e_byte_order { order_unknown, order_bigEndian, order_littleEndian }; 34enum e_byte_order { order_unknown, order_bigEndian, order_littleEndian };
35 35
36#include "plugin.h" 36#include "plugin.h"
37#ifdef SIMULATOR
38#define LINE_ATTR
39#define IDATA_ATTR
40#else
41#define LINE_ATTR __attribute__ ((aligned (16)))
42#define IDATA_ATTR __attribute__ ((section(".idata")))
43#endif
44#define PFILE int* 37#define PFILE int*
45#define memcpy rb->memcpy 38#define memcpy rb->memcpy
46#define memset rb->memset 39#define memset rb->memset
@@ -114,55 +107,55 @@ struct huffcodetab {
114}; 107};
115 108
116/* !!!!!!!! start of IRAM area: do not insert before x_int1 array !!!!!!!!!!!!! */ 109/* !!!!!!!! start of IRAM area: do not insert before x_int1 array !!!!!!!!!!!!! */
117short x_int0 [HAN_SIZE] IDATA_ATTR LINE_ATTR; // 1024 Bytes 110short x_int0 [HAN_SIZE] IBSS_ATTR; // 1024 Bytes
118int mdct_freq [2][2][samp_per_frame2] IDATA_ATTR LINE_ATTR; // 9216 Bytes 111int mdct_freq [2][2][samp_per_frame2] IBSS_ATTR; // 9216 Bytes
119short x_int1 [HAN_SIZE] IDATA_ATTR LINE_ATTR; // 1024 Bytes 112short x_int1 [HAN_SIZE] IBSS_ATTR; // 1024 Bytes
120/* !!!!!!!!!!!!!!!!!!!!! here you may insert other data !!!!!!!!!!!!!!!!!!!!!!! */ 113/* !!!!!!!!!!!!!!!!!!!!! here you may insert other data !!!!!!!!!!!!!!!!!!!!!!! */
121uint8 int2idx [4096] IDATA_ATTR LINE_ATTR; // 4096 Bytes 114uint8 int2idx [4096] IBSS_ATTR; // 4096 Bytes
122enct8 enc_data [2][2][samp_per_frame2] IDATA_ATTR LINE_ATTR; // 4608 Bytes 115enct8 enc_data [2][2][samp_per_frame2] IBSS_ATTR; // 4608 Bytes
123short y_int [64] IDATA_ATTR LINE_ATTR; // 256 Bytes 116short y_int [64] IBSS_ATTR; // 256 Bytes
124int off [2] IDATA_ATTR LINE_ATTR; // 16 Bytes 117int off [2] IBSS_ATTR; // 16 Bytes
125int scalefac_long[23] IDATA_ATTR LINE_ATTR; // 96 Bytes 118int scalefac_long[23] IBSS_ATTR; // 96 Bytes
126int mdct_in [36] IDATA_ATTR LINE_ATTR; // 144 Bytes 119int mdct_in [36] IBSS_ATTR; // 144 Bytes
127int sb_sample [2][3][18][SBLIMIT] IDATA_ATTR LINE_ATTR; // 13824 Bytes 120int sb_sample [2][3][18][SBLIMIT] IBSS_ATTR; // 13824 Bytes
128BF_Data CodedData IDATA_ATTR LINE_ATTR; // 1040 Bytes 121BF_Data CodedData IBSS_ATTR; // 1040 Bytes
129int ca_int [8] IDATA_ATTR LINE_ATTR; // 32 Bytes 122int ca_int [8] IBSS_ATTR; // 32 Bytes
130int cs_int [8] IDATA_ATTR LINE_ATTR; // 32 Bytes 123int cs_int [8] IBSS_ATTR; // 32 Bytes
131int win_int [18][36] IDATA_ATTR LINE_ATTR; // 2592 Bytes 124int win_int [18][36] IBSS_ATTR; // 2592 Bytes
132short filter_int [SBLIMIT][64] IDATA_ATTR LINE_ATTR; // 8192 Bytes 125short filter_int [SBLIMIT][64] IBSS_ATTR; // 8192 Bytes
133short enwindow_int[512] IDATA_ATTR LINE_ATTR; // 1024 Bytes 126short enwindow_int[512] IBSS_ATTR; // 1024 Bytes
134uint8 ht_count1 [2][2][16] IDATA_ATTR LINE_ATTR; // 64 Bytes 127uint8 ht_count1 [2][2][16] IBSS_ATTR; // 64 Bytes
135uint16 t1HB [ 4] IDATA_ATTR LINE_ATTR; // Bytes 128uint16 t1HB [ 4] IBSS_ATTR; // Bytes
136uint16 t2HB [ 9] IDATA_ATTR LINE_ATTR; // Bytes 129uint16 t2HB [ 9] IBSS_ATTR; // Bytes
137uint16 t3HB [ 9] IDATA_ATTR LINE_ATTR; // Bytes 130uint16 t3HB [ 9] IBSS_ATTR; // Bytes
138uint16 t5HB [ 16] IDATA_ATTR LINE_ATTR; // Bytes 131uint16 t5HB [ 16] IBSS_ATTR; // Bytes
139uint16 t6HB [ 16] IDATA_ATTR LINE_ATTR; // Bytes 132uint16 t6HB [ 16] IBSS_ATTR; // Bytes
140uint16 t7HB [ 36] IDATA_ATTR LINE_ATTR; // Bytes 133uint16 t7HB [ 36] IBSS_ATTR; // Bytes
141uint16 t8HB [ 36] IDATA_ATTR LINE_ATTR; // Bytes 134uint16 t8HB [ 36] IBSS_ATTR; // Bytes
142uint16 t9HB [ 36] IDATA_ATTR LINE_ATTR; // Bytes 135uint16 t9HB [ 36] IBSS_ATTR; // Bytes
143uint16 t10HB [ 64] IDATA_ATTR LINE_ATTR; // Bytes 136uint16 t10HB [ 64] IBSS_ATTR; // Bytes
144uint16 t11HB [ 64] IDATA_ATTR LINE_ATTR; // Bytes 137uint16 t11HB [ 64] IBSS_ATTR; // Bytes
145uint16 t12HB [ 64] IDATA_ATTR LINE_ATTR; // Bytes 138uint16 t12HB [ 64] IBSS_ATTR; // Bytes
146uint16 t13HB [256] IDATA_ATTR LINE_ATTR; // Bytes 139uint16 t13HB [256] IBSS_ATTR; // Bytes
147uint16 t15HB [256] IDATA_ATTR LINE_ATTR; // Bytes 140uint16 t15HB [256] IBSS_ATTR; // Bytes
148uint16 t16HB [256] IDATA_ATTR LINE_ATTR; // Bytes 141uint16 t16HB [256] IBSS_ATTR; // Bytes
149uint16 t24HB [256] IDATA_ATTR LINE_ATTR; // Bytes 142uint16 t24HB [256] IBSS_ATTR; // Bytes
150uint8 t1l [ 4] IDATA_ATTR LINE_ATTR; // Bytes 143uint8 t1l [ 4] IBSS_ATTR; // Bytes
151uint8 t2l [ 9] IDATA_ATTR LINE_ATTR; // Bytes 144uint8 t2l [ 9] IBSS_ATTR; // Bytes
152uint8 t3l [ 9] IDATA_ATTR LINE_ATTR; // Bytes 145uint8 t3l [ 9] IBSS_ATTR; // Bytes
153uint8 t5l [ 16] IDATA_ATTR LINE_ATTR; // Bytes 146uint8 t5l [ 16] IBSS_ATTR; // Bytes
154uint8 t6l [ 16] IDATA_ATTR LINE_ATTR; // Bytes 147uint8 t6l [ 16] IBSS_ATTR; // Bytes
155uint8 t7l [ 36] IDATA_ATTR LINE_ATTR; // Bytes 148uint8 t7l [ 36] IBSS_ATTR; // Bytes
156uint8 t8l [ 36] IDATA_ATTR LINE_ATTR; // Bytes 149uint8 t8l [ 36] IBSS_ATTR; // Bytes
157uint8 t9l [ 36] IDATA_ATTR LINE_ATTR; // Bytes 150uint8 t9l [ 36] IBSS_ATTR; // Bytes
158uint8 t10l [ 64] IDATA_ATTR LINE_ATTR; // Bytes 151uint8 t10l [ 64] IBSS_ATTR; // Bytes
159uint8 t11l [ 64] IDATA_ATTR LINE_ATTR; // Bytes 152uint8 t11l [ 64] IBSS_ATTR; // Bytes
160uint8 t12l [ 64] IDATA_ATTR LINE_ATTR; // Bytes 153uint8 t12l [ 64] IBSS_ATTR; // Bytes
161uint8 t13l [256] IDATA_ATTR LINE_ATTR; // Bytes 154uint8 t13l [256] IBSS_ATTR; // Bytes
162uint8 t15l [256] IDATA_ATTR LINE_ATTR; // Bytes 155uint8 t15l [256] IBSS_ATTR; // Bytes
163uint8 t16l [256] IDATA_ATTR LINE_ATTR; // Bytes 156uint8 t16l [256] IBSS_ATTR; // Bytes
164uint8 t24l [256] IDATA_ATTR LINE_ATTR; // Bytes 157uint8 t24l [256] IBSS_ATTR; // Bytes
165struct huffcodetab ht [HTN] IDATA_ATTR LINE_ATTR; // Bytes 158struct huffcodetab ht [HTN] IBSS_ATTR; // Bytes
166 159
167static const uint8 ht_count1_const[2][2][16] = 160static const uint8 ht_count1_const[2][2][16] =
168{ { { 1, 5, 4, 5, 6, 5, 4, 4, 7, 3, 6, 0, 7, 2, 3, 1 }, /* table0 */ 161{ { { 1, 5, 4, 5, 6, 5, 4, 4, 7, 3, 6, 0, 7, 2, 3, 1 }, /* table0 */
@@ -707,7 +700,7 @@ void putbits(uint32 val, uint32 nbit)
707/* open the device to write the bit stream into it */ 700/* open the device to write the bit stream into it */
708void open_bitstream(char *bs_filenam) /* name of the bit stream file */ 701void open_bitstream(char *bs_filenam) /* name of the bit stream file */
709{ 702{
710 mp3file = (mp3_hdl=rb->open(bs_filenam, O_WRONLY|O_CREAT)) < 0 ? NULL : &mp3_hdl; 703 mp3file = (mp3_hdl=rb->open(bs_filenam, O_WRONLY|O_CREAT|O_TRUNC)) < 0 ? NULL : &mp3_hdl;
711} 704}
712 705
713/* This is called after a frame of audio has been quantized and coded. 706/* This is called after a frame of audio has been quantized and coded.
@@ -1328,6 +1321,9 @@ void iteration_loop(int mdct_freq_org[2][2][samp_per_frame2], side_info_t cod_in
1328/* 36 coefficents in the time domain and 18 in the frequency */ 1321/* 36 coefficents in the time domain and 18 in the frequency */
1329/* domain. */ 1322/* domain. */
1330/*-------------------------------------------------------------------*/ 1323/*-------------------------------------------------------------------*/
1324
1325/* TODO: This MDCT implementation is very crude, and should be replaced by
1326 a completely different algorithm. */
1331void mdct_int( int *in, int *out ) 1327void mdct_int( int *in, int *out )
1332{ 1328{
1333 int m, tmp=0; 1329 int m, tmp=0;
@@ -1335,58 +1331,56 @@ void mdct_int( int *in, int *out )
1335 for(m=18; m--; ) 1331 for(m=18; m--; )
1336 { 1332 {
1337#ifdef CPU_COLDFIRE 1333#ifdef CPU_COLDFIRE
1338 asm volatile ("move.l #0, %macsr"); /* integer mode */
1339
1340 { int *wint = win_int[m]; 1334 { int *wint = win_int[m];
1341 int *indat = in; 1335 int *indat = in;
1342 1336
1343 asm volatile( 1337 asm volatile(
1344 "movem.l (%[indat]), %%d0-%%d7\n" 1338 "movem.l (%[indat]), %%d0-%%d7\n"
1345 "move.l (%[wint]), %%a5\n" 1339 "move.l (%[wint])+, %%a5\n"
1346 "mac.l %%d0, %%a5, ( 4, %[wint]), %%a5, %%acc0\n" 1340 "mac.l %%d0, %%a5, (%[wint])+, %%a5, %%acc0\n"
1347 "mac.l %%d1, %%a5, ( 8, %[wint]), %%a5, %%acc0\n" 1341 "mac.l %%d1, %%a5, (%[wint])+, %%a5, %%acc0\n"
1348 "mac.l %%d2, %%a5, ( 12, %[wint]), %%a5, %%acc0\n" 1342 "mac.l %%d2, %%a5, (%[wint])+, %%a5, %%acc0\n"
1349 "mac.l %%d3, %%a5, ( 16, %[wint]), %%a5, %%acc0\n" 1343 "mac.l %%d3, %%a5, (%[wint])+, %%a5, %%acc0\n"
1350 "mac.l %%d4, %%a5, ( 20, %[wint]), %%a5, %%acc0\n" 1344 "mac.l %%d4, %%a5, (%[wint])+, %%a5, %%acc0\n"
1351 "mac.l %%d5, %%a5, ( 24, %[wint]), %%a5, %%acc0\n" 1345 "mac.l %%d5, %%a5, (%[wint])+, %%a5, %%acc0\n"
1352 "mac.l %%d6, %%a5, ( 28, %[wint]), %%a5, %%acc0\n" 1346 "mac.l %%d6, %%a5, (%[wint])+, %%a5, %%acc0\n"
1353 "mac.l %%d7, %%a5, ( 32, %[wint]), %%a5, %%acc0\n" 1347 "mac.l %%d7, %%a5, (%[wint])+, %%a5, %%acc0\n"
1354 "movem.l (32,%[indat]), %%d0-%%d7\n" 1348 "movem.l (32,%[indat]), %%d0-%%d7\n"
1355 "mac.l %%d0, %%a5, ( 36, %[wint]), %%a5, %%acc0\n" 1349 "mac.l %%d0, %%a5, (%[wint])+, %%a5, %%acc0\n"
1356 "mac.l %%d1, %%a5, ( 40, %[wint]), %%a5, %%acc0\n" 1350 "mac.l %%d1, %%a5, (%[wint])+, %%a5, %%acc0\n"
1357 "mac.l %%d2, %%a5, ( 44, %[wint]), %%a5, %%acc0\n" 1351 "mac.l %%d2, %%a5, (%[wint])+, %%a5, %%acc0\n"
1358 "mac.l %%d3, %%a5, ( 48, %[wint]), %%a5, %%acc0\n" 1352 "mac.l %%d3, %%a5, (%[wint])+, %%a5, %%acc0\n"
1359 "mac.l %%d4, %%a5, ( 52, %[wint]), %%a5, %%acc0\n" 1353 "mac.l %%d4, %%a5, (%[wint])+, %%a5, %%acc0\n"
1360 "mac.l %%d5, %%a5, ( 56, %[wint]), %%a5, %%acc0\n" 1354 "mac.l %%d5, %%a5, (%[wint])+, %%a5, %%acc0\n"
1361 "mac.l %%d6, %%a5, ( 60, %[wint]), %%a5, %%acc0\n" 1355 "mac.l %%d6, %%a5, (%[wint])+, %%a5, %%acc0\n"
1362 "mac.l %%d7, %%a5, ( 64, %[wint]), %%a5, %%acc0\n" 1356 "mac.l %%d7, %%a5, (%[wint])+, %%a5, %%acc0\n"
1363 "movem.l (64,%[indat]), %%d0-%%d7\n" 1357 "movem.l (64,%[indat]), %%d0-%%d7\n"
1364 "mac.l %%d0, %%a5, ( 68, %[wint]), %%a5, %%acc0\n" 1358 "mac.l %%d0, %%a5, (%[wint])+, %%a5, %%acc0\n"
1365 "mac.l %%d1, %%a5, ( 72, %[wint]), %%a5, %%acc0\n" 1359 "mac.l %%d1, %%a5, (%[wint])+, %%a5, %%acc0\n"
1366 "mac.l %%d2, %%a5, ( 76, %[wint]), %%a5, %%acc0\n" 1360 "mac.l %%d2, %%a5, (%[wint])+, %%a5, %%acc0\n"
1367 "mac.l %%d3, %%a5, ( 80, %[wint]), %%a5, %%acc0\n" 1361 "mac.l %%d3, %%a5, (%[wint])+, %%a5, %%acc0\n"
1368 "mac.l %%d4, %%a5, ( 84, %[wint]), %%a5, %%acc0\n" 1362 "mac.l %%d4, %%a5, (%[wint])+, %%a5, %%acc0\n"
1369 "mac.l %%d5, %%a5, ( 88, %[wint]), %%a5, %%acc0\n" 1363 "mac.l %%d5, %%a5, (%[wint])+, %%a5, %%acc0\n"
1370 "mac.l %%d6, %%a5, ( 92, %[wint]), %%a5, %%acc0\n" 1364 "mac.l %%d6, %%a5, (%[wint])+, %%a5, %%acc0\n"
1371 "mac.l %%d7, %%a5, ( 96, %[wint]), %%a5, %%acc0\n" 1365 "mac.l %%d7, %%a5, (%[wint])+, %%a5, %%acc0\n"
1372 "movem.l (96,%[indat]), %%d0-%%d7\n" 1366 "movem.l (96,%[indat]), %%d0-%%d7\n"
1373 "mac.l %%d0, %%a5, (100, %[wint]), %%a5, %%acc0\n" 1367 "mac.l %%d0, %%a5, (%[wint])+, %%a5, %%acc0\n"
1374 "mac.l %%d1, %%a5, (104, %[wint]), %%a5, %%acc0\n" 1368 "mac.l %%d1, %%a5, (%[wint])+, %%a5, %%acc0\n"
1375 "mac.l %%d2, %%a5, (108, %[wint]), %%a5, %%acc0\n" 1369 "mac.l %%d2, %%a5, (%[wint])+, %%a5, %%acc0\n"
1376 "mac.l %%d3, %%a5, (112, %[wint]), %%a5, %%acc0\n" 1370 "mac.l %%d3, %%a5, (%[wint])+, %%a5, %%acc0\n"
1377 "mac.l %%d4, %%a5, (116, %[wint]), %%a5, %%acc0\n" 1371 "mac.l %%d4, %%a5, (%[wint])+, %%a5, %%acc0\n"
1378 "mac.l %%d5, %%a5, (120, %[wint]), %%a5, %%acc0\n" 1372 "mac.l %%d5, %%a5, (%[wint])+, %%a5, %%acc0\n"
1379 "mac.l %%d6, %%a5, (124, %[wint]), %%a5, %%acc0\n" 1373 "mac.l %%d6, %%a5, (%[wint])+, %%a5, %%acc0\n"
1380 "mac.l %%d7, %%a5, (128, %[wint]), %%a5, %%acc0\n" 1374 "mac.l %%d7, %%a5, (%[wint])+, %%a5, %%acc0\n"
1381 "movem.l (128,%[indat]), %%d0-%%d3\n" 1375 "movem.l (128,%[indat]), %%d0-%%d3\n"
1382 "mac.l %%d0, %%a5, (132, %[wint]), %%a5, %%acc0\n" 1376 "mac.l %%d0, %%a5, (%[wint])+, %%a5, %%acc0\n"
1383 "mac.l %%d1, %%a5, (136, %[wint]), %%a5, %%acc0\n" 1377 "mac.l %%d1, %%a5, (%[wint])+, %%a5, %%acc0\n"
1384 "mac.l %%d2, %%a5, (140, %[wint]), %%a5, %%acc0\n" 1378 "mac.l %%d2, %%a5, (%[wint])+, %%a5, %%acc0\n"
1385 "mac.l %%d3, %%a5, %%acc0\n" 1379 "mac.l %%d3, %%a5, %%acc0\n"
1386 : : [indat] "a" (indat), [wint] "a" (wint) 1380 "movclr.l %%acc0, %[tmp]"
1381 : [wint] "+a" (wint), [tmp] "+r" (tmp) : [indat] "a" (indat)
1387 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5"); 1382 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5");
1388 } 1383 }
1389 asm volatile ("movclr.l %%acc0, %[tmp]\n" : [tmp]"+r"(tmp) );
1390#else 1384#else
1391 int k; 1385 int k;
1392 for(k=36,tmp=0; k--; ) 1386 for(k=36,tmp=0; k--; )
@@ -1468,17 +1462,13 @@ void filter_subband(short *buffer, int s[SBLIMIT], int k)
1468 short *yint = y_int; 1462 short *yint = y_int;
1469 1463
1470 asm volatile ("movem.l %%d0/%%d2-%%d7/%%a2-%%a7,(%0)\n" : : "a" (reg_buff) : "d0"); 1464 asm volatile ("movem.l %%d0/%%d2-%%d7/%%a2-%%a7,(%0)\n" : : "a" (reg_buff) : "d0");
1471 asm volatile ("move.l #0, %macsr"); /* integer mode */
1472 asm volatile ("move.l #32, %acc2"); /* set loop counter */
1473
1474 asm volatile( 1465 asm volatile(
1475 "move.l #32, %%acc2\n" 1466 "moveq.l #32, %%d0\n"
1467 "move.l %%d0, %%acc2\n" /* set loop counter */
1476 "move.l %[xint], %%d0\n" /* d0 = x_int[k] */ 1468 "move.l %[xint], %%d0\n" /* d0 = x_int[k] */
1477 "or.l #0x3ff, %%d0\n" 1469 "or.l #0x3ff, %%d0\n"
1478 "move.l %%d0, %%mask\n" /* set address mask */ 1470 "move.l %%d0, %%mask\n" /* set address mask */
1479
1480 "move.l (%[xint]), %%d4\n" /* d4 = x_int[k][off[k]] */ 1471 "move.l (%[xint]), %%d4\n" /* d4 = x_int[k][off[k]] */
1481 ".align 2\n"
1482 1472
1483 "loop_start:\n" 1473 "loop_start:\n"
1484 "movem.l (%[enwindow]), %%d0-%%d3\n" /* load 4 values */ 1474 "movem.l (%[enwindow]), %%d0-%%d3\n" /* load 4 values */
@@ -1499,20 +1489,20 @@ void filter_subband(short *buffer, int s[SBLIMIT], int k)
1499 "mac.w %%d2u, %%a2l, %%acc1\n" 1489 "mac.w %%d2u, %%a2l, %%acc1\n"
1500 "mac.w %%d2l, %%a3l, %%acc1\n" 1490 "mac.w %%d2l, %%a3l, %%acc1\n"
1501 "mac.w %%d3u, %%a4l, %%acc1\n" 1491 "mac.w %%d3u, %%a4l, %%acc1\n"
1502 "add.l #4, %[xint]\n" /* xint += 2 */ 1492 "addq.l #4, %[xint]\n" /* xint += 2 */
1503 "mac.w %%d3l, %%a5l, (%[xint])&, %%d4, %%acc1\n" 1493 "mac.w %%d3l, %%a5l, (%[xint])&, %%d4, %%acc1\n"
1504 1494
1505 "movclr.l %%acc0, %%d5\n" 1495 "movclr.l %%acc0, %%d5\n"
1506 "movclr.l %%acc1, %%d6\n" 1496 "movclr.l %%acc1, %%d6\n"
1507 "add.l #262144, %%d5\n" 1497 "move.l #262144, %%d7\n"
1508 "add.l #262144, %%d6\n" 1498 "add.l %%d7, %%d5\n"
1509 "move.l #19, %%d7\n" 1499 "add.l %%d7, %%d6\n"
1510 "asr.l %%d7,%%d5\n" 1500 "moveq.l #19, %%d7\n"
1511 "asr.l %%d7,%%d6\n" 1501 "asr.l %%d7, %%d5\n"
1512 "move.w %%d5, (%[yint])\n" 1502 "asr.l %%d7, %%d6\n"
1513 "move.w %%d6, (2,%[yint])\n" 1503 "move.w %%d5, (%[yint])+\n"
1514 1504 "move.w %%d6, (%[yint])+\n"
1515 "add.l #4, %[yint]\n" /* yint += 2 */ 1505
1516 "add.l #32, %[enwindow]\n" /* enwindow += 16 */ 1506 "add.l #32, %[enwindow]\n" /* enwindow += 16 */
1517 1507
1518 "moveq.l #1, %%d0\n" 1508 "moveq.l #1, %%d0\n"
@@ -1542,83 +1532,81 @@ void filter_subband(short *buffer, int s[SBLIMIT], int k)
1542 short *filt = filter_int[i]; 1532 short *filt = filter_int[i];
1543 1533
1544#ifdef CPU_COLDFIRE 1534#ifdef CPU_COLDFIRE
1545 asm volatile ("move.l #0, %macsr"); /* integer mode */
1546 { 1535 {
1547 asm volatile( 1536 asm volatile(
1548 "move.l (%[yint]), %%a5\n" 1537 "move.l (%[yint])+, %%a5\n"
1549 "movem.l (%[filt]), %%d0-%%d7\n" 1538 "movem.l (%[filt]), %%d0-%%d7\n"
1550 "mac.w %%d0u, %%a5u, %%acc0\n" 1539 "mac.w %%d0u, %%a5u, %%acc0\n"
1551 "mac.w %%d0l, %%a5l, ( 4, %[yint]), %%a5, %%acc0\n" 1540 "mac.w %%d0l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1552 "mac.w %%d1u, %%a5u, %%acc0\n" 1541 "mac.w %%d1u, %%a5u, %%acc0\n"
1553 "mac.w %%d1l, %%a5l, ( 8, %[yint]), %%a5, %%acc0\n" 1542 "mac.w %%d1l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1554 "mac.w %%d2u, %%a5u, %%acc0\n" 1543 "mac.w %%d2u, %%a5u, %%acc0\n"
1555 "mac.w %%d2l, %%a5l, ( 12, %[yint]), %%a5, %%acc0\n" 1544 "mac.w %%d2l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1556 "mac.w %%d3u, %%a5u, %%acc0\n" 1545 "mac.w %%d3u, %%a5u, %%acc0\n"
1557 "mac.w %%d3l, %%a5l, ( 16, %[yint]), %%a5, %%acc0\n" 1546 "mac.w %%d3l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1558 "mac.w %%d4u, %%a5u, %%acc0\n" 1547 "mac.w %%d4u, %%a5u, %%acc0\n"
1559 "mac.w %%d4l, %%a5l, ( 20, %[yint]), %%a5, %%acc0\n" 1548 "mac.w %%d4l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1560 "mac.w %%d5u, %%a5u, %%acc0\n" 1549 "mac.w %%d5u, %%a5u, %%acc0\n"
1561 "mac.w %%d5l, %%a5l, ( 24, %[yint]), %%a5, %%acc0\n" 1550 "mac.w %%d5l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1562 "mac.w %%d6u, %%a5u, %%acc0\n" 1551 "mac.w %%d6u, %%a5u, %%acc0\n"
1563 "mac.w %%d6l, %%a5l, ( 28, %[yint]), %%a5, %%acc0\n" 1552 "mac.w %%d6l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1564 "mac.w %%d7u, %%a5u, %%acc0\n" 1553 "mac.w %%d7u, %%a5u, %%acc0\n"
1565 "mac.w %%d7l, %%a5l, ( 32, %[yint]), %%a5, %%acc0\n" 1554 "mac.w %%d7l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1566 "movem.l (32,%[filt]), %%d0-%%d7\n" 1555 "movem.l (32,%[filt]), %%d0-%%d7\n"
1567 "mac.w %%d0u, %%a5u, %%acc0\n" 1556 "mac.w %%d0u, %%a5u, %%acc0\n"
1568 "mac.w %%d0l, %%a5l, ( 36, %[yint]), %%a5, %%acc0\n" 1557 "mac.w %%d0l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1569 "mac.w %%d1u, %%a5u, %%acc0\n" 1558 "mac.w %%d1u, %%a5u, %%acc0\n"
1570 "mac.w %%d1l, %%a5l, ( 40, %[yint]), %%a5, %%acc0\n" 1559 "mac.w %%d1l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1571 "mac.w %%d2u, %%a5u, %%acc0\n" 1560 "mac.w %%d2u, %%a5u, %%acc0\n"
1572 "mac.w %%d2l, %%a5l, ( 44, %[yint]), %%a5, %%acc0\n" 1561 "mac.w %%d2l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1573 "mac.w %%d3u, %%a5u, %%acc0\n" 1562 "mac.w %%d3u, %%a5u, %%acc0\n"
1574 "mac.w %%d3l, %%a5l, ( 48, %[yint]), %%a5, %%acc0\n" 1563 "mac.w %%d3l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1575 "mac.w %%d4u, %%a5u, %%acc0\n" 1564 "mac.w %%d4u, %%a5u, %%acc0\n"
1576 "mac.w %%d4l, %%a5l, ( 52, %[yint]), %%a5, %%acc0\n" 1565 "mac.w %%d4l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1577 "mac.w %%d5u, %%a5u, %%acc0\n" 1566 "mac.w %%d5u, %%a5u, %%acc0\n"
1578 "mac.w %%d5l, %%a5l, ( 56, %[yint]), %%a5, %%acc0\n" 1567 "mac.w %%d5l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1579 "mac.w %%d6u, %%a5u, %%acc0\n" 1568 "mac.w %%d6u, %%a5u, %%acc0\n"
1580 "mac.w %%d6l, %%a5l, ( 60, %[yint]), %%a5, %%acc0\n" 1569 "mac.w %%d6l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1581 "mac.w %%d7u, %%a5u, %%acc0\n" 1570 "mac.w %%d7u, %%a5u, %%acc0\n"
1582 "mac.w %%d7l, %%a5l, ( 64, %[yint]), %%a5, %%acc0\n" 1571 "mac.w %%d7l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1583 "movem.l (64,%[filt]), %%d0-%%d7\n" 1572 "movem.l (64,%[filt]), %%d0-%%d7\n"
1584 "mac.w %%d0u, %%a5u, %%acc0\n" 1573 "mac.w %%d0u, %%a5u, %%acc0\n"
1585 "mac.w %%d0l, %%a5l, ( 68, %[yint]), %%a5, %%acc0\n" 1574 "mac.w %%d0l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1586 "mac.w %%d1u, %%a5u, %%acc0\n" 1575 "mac.w %%d1u, %%a5u, %%acc0\n"
1587 "mac.w %%d1l, %%a5l, ( 72, %[yint]), %%a5, %%acc0\n" 1576 "mac.w %%d1l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1588 "mac.w %%d2u, %%a5u, %%acc0\n" 1577 "mac.w %%d2u, %%a5u, %%acc0\n"
1589 "mac.w %%d2l, %%a5l, ( 76, %[yint]), %%a5, %%acc0\n" 1578 "mac.w %%d2l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1590 "mac.w %%d3u, %%a5u, %%acc0\n" 1579 "mac.w %%d3u, %%a5u, %%acc0\n"
1591 "mac.w %%d3l, %%a5l, ( 80, %[yint]), %%a5, %%acc0\n" 1580 "mac.w %%d3l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1592 "mac.w %%d4u, %%a5u, %%acc0\n" 1581 "mac.w %%d4u, %%a5u, %%acc0\n"
1593 "mac.w %%d4l, %%a5l, ( 84, %[yint]), %%a5, %%acc0\n" 1582 "mac.w %%d4l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1594 "mac.w %%d5u, %%a5u, %%acc0\n" 1583 "mac.w %%d5u, %%a5u, %%acc0\n"
1595 "mac.w %%d5l, %%a5l, ( 88, %[yint]), %%a5, %%acc0\n" 1584 "mac.w %%d5l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1596 "mac.w %%d6u, %%a5u, %%acc0\n" 1585 "mac.w %%d6u, %%a5u, %%acc0\n"
1597 "mac.w %%d6l, %%a5l, ( 92, %[yint]), %%a5, %%acc0\n" 1586 "mac.w %%d6l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1598 "mac.w %%d7u, %%a5u, %%acc0\n" 1587 "mac.w %%d7u, %%a5u, %%acc0\n"
1599 "mac.w %%d7l, %%a5l, ( 96, %[yint]), %%a5, %%acc0\n" 1588 "mac.w %%d7l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1600 "movem.l (96,%[filt]), %%d0-%%d7\n" 1589 "movem.l (96,%[filt]), %%d0-%%d7\n"
1601 "mac.w %%d0u, %%a5u, %%acc0\n" 1590 "mac.w %%d0u, %%a5u, %%acc0\n"
1602 "mac.w %%d0l, %%a5l, (100, %[yint]), %%a5, %%acc0\n" 1591 "mac.w %%d0l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1603 "mac.w %%d1u, %%a5u, %%acc0\n" 1592 "mac.w %%d1u, %%a5u, %%acc0\n"
1604 "mac.w %%d1l, %%a5l, (104, %[yint]), %%a5, %%acc0\n" 1593 "mac.w %%d1l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1605 "mac.w %%d2u, %%a5u, %%acc0\n" 1594 "mac.w %%d2u, %%a5u, %%acc0\n"
1606 "mac.w %%d2l, %%a5l, (108, %[yint]), %%a5, %%acc0\n" 1595 "mac.w %%d2l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1607 "mac.w %%d3u, %%a5u, %%acc0\n" 1596 "mac.w %%d3u, %%a5u, %%acc0\n"
1608 "mac.w %%d3l, %%a5l, (112, %[yint]), %%a5, %%acc0\n" 1597 "mac.w %%d3l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1609 "mac.w %%d4u, %%a5u, %%acc0\n" 1598 "mac.w %%d4u, %%a5u, %%acc0\n"
1610 "mac.w %%d4l, %%a5l, (116, %[yint]), %%a5, %%acc0\n" 1599 "mac.w %%d4l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1611 "mac.w %%d5u, %%a5u, %%acc0\n" 1600 "mac.w %%d5u, %%a5u, %%acc0\n"
1612 "mac.w %%d5l, %%a5l, (120, %[yint]), %%a5, %%acc0\n" 1601 "mac.w %%d5l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
1613 "mac.w %%d6u, %%a5u, %%acc0\n" 1602 "mac.w %%d6u, %%a5u, %%acc0\n"
1614 "mac.w %%d6l, %%a5l, (124, %[yint]), %%a5, %%acc0\n" 1603 "mac.w %%d6l, %%a5l, (%[yint]), %%a5, %%acc0\n"
1615 "mac.w %%d7u, %%a5u, %%acc0\n" 1604 "mac.w %%d7u, %%a5u, %%acc0\n"
1616 "mac.w %%d7l, %%a5l, %%acc0\n" 1605 "mac.w %%d7l, %%a5l, %%acc0\n"
1617 1606 "lea.l (-31*4, %[yint]), %[yint]\n" /* wrap yint back to start */
1618 : : [filt] "a" (filt), [yint] "a" (y_int) 1607 "movclr.l %%acc0, %[tmp]"
1608 : [tmp] "=r" (tmp) : [filt] "a" (filt), [yint] "a" (y_int)
1619 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5" ); 1609 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5" );
1620
1621 asm volatile ("movclr.l %%acc0, %[tmp]\n" : [tmp]"+r"(tmp) );
1622 } 1610 }
1623#else 1611#else
1624 for(j=64, tmp=0; j--; ) 1612 for(j=64, tmp=0; j--; )
@@ -1734,15 +1722,19 @@ void compress(void)
1734 x_int[0] = x_int0; 1722 x_int[0] = x_int0;
1735 x_int[1] = x_int1; 1723 x_int[1] = x_int1;
1736 1724
1725#ifdef CPU_COLDFIRE
1726 asm volatile ("move.l #0, %macsr"); /* integer mode */
1727#endif
1728
1737#ifndef SIMULATOR 1729#ifndef SIMULATOR
1738 if(((long)x_int0 | (long)x_int1) & 0x7ff) 1730 if(((long)x_int0 | (long)x_int1) & 0x7ff)
1739 return; /* both arrays must be aligned to 0x800 boundary */ 1731 return; /* both arrays must be aligned to 0x800 boundary */
1740#endif 1732#endif
1741 1733
1742 if(config.wave.channels == 1) 1734 if(config.wave.channels == 1)
1743 sideinfo_len = 32 + 136; 1735 sideinfo_len = 32 + 136;
1744 else 1736 else
1745 sideinfo_len = 32 + 256; 1737 sideinfo_len = 32 + 256;
1746 1738
1747 /* Set initial step size */ 1739 /* Set initial step size */
1748 cod_info[0][0].quantizerStepSize = 0x10; 1740 cod_info[0][0].quantizerStepSize = 0x10;