diff options
author | Thom Johansen <thomj@rockbox.org> | 2006-01-11 17:58:40 +0000 |
---|---|---|
committer | Thom Johansen <thomj@rockbox.org> | 2006-01-11 17:58:40 +0000 |
commit | d1b6bb81b49a0f6b16efec4c97ed73f88a4aa9f9 (patch) | |
tree | 38e85dcaf5295d8bce165d644f8d61f9256322e9 /apps/plugins | |
parent | aa7ff208ce849bfccc7808e91d9781539be885ca (diff) | |
download | rockbox-d1b6bb81b49a0f6b16efec4c97ed73f88a4aa9f9.tar.gz rockbox-d1b6bb81b49a0f6b16efec4c97ed73f88a4aa9f9.zip |
Remove the unnecessary IDATA_ATTR and LINE_ATTR #defines. Introduce usage of IBSS_ATTR instead of incorrect IDATA_ATTR. Remove LINE_ATTR use, since this is a no-win when using IRAM. Make encoder truncate existing files. Make use of post-increment addressing mode in MAC chains for to minimuse code size and gain some speed. Some minor assembler touchups. About 10% speedup in total.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8339 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins')
-rw-r--r-- | apps/plugins/mp3_encoder.c | 294 |
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 @@ | |||
34 | enum e_byte_order { order_unknown, order_bigEndian, order_littleEndian }; | 34 | enum 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 !!!!!!!!!!!!! */ |
117 | short x_int0 [HAN_SIZE] IDATA_ATTR LINE_ATTR; // 1024 Bytes | 110 | short x_int0 [HAN_SIZE] IBSS_ATTR; // 1024 Bytes |
118 | int mdct_freq [2][2][samp_per_frame2] IDATA_ATTR LINE_ATTR; // 9216 Bytes | 111 | int mdct_freq [2][2][samp_per_frame2] IBSS_ATTR; // 9216 Bytes |
119 | short x_int1 [HAN_SIZE] IDATA_ATTR LINE_ATTR; // 1024 Bytes | 112 | short x_int1 [HAN_SIZE] IBSS_ATTR; // 1024 Bytes |
120 | /* !!!!!!!!!!!!!!!!!!!!! here you may insert other data !!!!!!!!!!!!!!!!!!!!!!! */ | 113 | /* !!!!!!!!!!!!!!!!!!!!! here you may insert other data !!!!!!!!!!!!!!!!!!!!!!! */ |
121 | uint8 int2idx [4096] IDATA_ATTR LINE_ATTR; // 4096 Bytes | 114 | uint8 int2idx [4096] IBSS_ATTR; // 4096 Bytes |
122 | enct8 enc_data [2][2][samp_per_frame2] IDATA_ATTR LINE_ATTR; // 4608 Bytes | 115 | enct8 enc_data [2][2][samp_per_frame2] IBSS_ATTR; // 4608 Bytes |
123 | short y_int [64] IDATA_ATTR LINE_ATTR; // 256 Bytes | 116 | short y_int [64] IBSS_ATTR; // 256 Bytes |
124 | int off [2] IDATA_ATTR LINE_ATTR; // 16 Bytes | 117 | int off [2] IBSS_ATTR; // 16 Bytes |
125 | int scalefac_long[23] IDATA_ATTR LINE_ATTR; // 96 Bytes | 118 | int scalefac_long[23] IBSS_ATTR; // 96 Bytes |
126 | int mdct_in [36] IDATA_ATTR LINE_ATTR; // 144 Bytes | 119 | int mdct_in [36] IBSS_ATTR; // 144 Bytes |
127 | int sb_sample [2][3][18][SBLIMIT] IDATA_ATTR LINE_ATTR; // 13824 Bytes | 120 | int sb_sample [2][3][18][SBLIMIT] IBSS_ATTR; // 13824 Bytes |
128 | BF_Data CodedData IDATA_ATTR LINE_ATTR; // 1040 Bytes | 121 | BF_Data CodedData IBSS_ATTR; // 1040 Bytes |
129 | int ca_int [8] IDATA_ATTR LINE_ATTR; // 32 Bytes | 122 | int ca_int [8] IBSS_ATTR; // 32 Bytes |
130 | int cs_int [8] IDATA_ATTR LINE_ATTR; // 32 Bytes | 123 | int cs_int [8] IBSS_ATTR; // 32 Bytes |
131 | int win_int [18][36] IDATA_ATTR LINE_ATTR; // 2592 Bytes | 124 | int win_int [18][36] IBSS_ATTR; // 2592 Bytes |
132 | short filter_int [SBLIMIT][64] IDATA_ATTR LINE_ATTR; // 8192 Bytes | 125 | short filter_int [SBLIMIT][64] IBSS_ATTR; // 8192 Bytes |
133 | short enwindow_int[512] IDATA_ATTR LINE_ATTR; // 1024 Bytes | 126 | short enwindow_int[512] IBSS_ATTR; // 1024 Bytes |
134 | uint8 ht_count1 [2][2][16] IDATA_ATTR LINE_ATTR; // 64 Bytes | 127 | uint8 ht_count1 [2][2][16] IBSS_ATTR; // 64 Bytes |
135 | uint16 t1HB [ 4] IDATA_ATTR LINE_ATTR; // Bytes | 128 | uint16 t1HB [ 4] IBSS_ATTR; // Bytes |
136 | uint16 t2HB [ 9] IDATA_ATTR LINE_ATTR; // Bytes | 129 | uint16 t2HB [ 9] IBSS_ATTR; // Bytes |
137 | uint16 t3HB [ 9] IDATA_ATTR LINE_ATTR; // Bytes | 130 | uint16 t3HB [ 9] IBSS_ATTR; // Bytes |
138 | uint16 t5HB [ 16] IDATA_ATTR LINE_ATTR; // Bytes | 131 | uint16 t5HB [ 16] IBSS_ATTR; // Bytes |
139 | uint16 t6HB [ 16] IDATA_ATTR LINE_ATTR; // Bytes | 132 | uint16 t6HB [ 16] IBSS_ATTR; // Bytes |
140 | uint16 t7HB [ 36] IDATA_ATTR LINE_ATTR; // Bytes | 133 | uint16 t7HB [ 36] IBSS_ATTR; // Bytes |
141 | uint16 t8HB [ 36] IDATA_ATTR LINE_ATTR; // Bytes | 134 | uint16 t8HB [ 36] IBSS_ATTR; // Bytes |
142 | uint16 t9HB [ 36] IDATA_ATTR LINE_ATTR; // Bytes | 135 | uint16 t9HB [ 36] IBSS_ATTR; // Bytes |
143 | uint16 t10HB [ 64] IDATA_ATTR LINE_ATTR; // Bytes | 136 | uint16 t10HB [ 64] IBSS_ATTR; // Bytes |
144 | uint16 t11HB [ 64] IDATA_ATTR LINE_ATTR; // Bytes | 137 | uint16 t11HB [ 64] IBSS_ATTR; // Bytes |
145 | uint16 t12HB [ 64] IDATA_ATTR LINE_ATTR; // Bytes | 138 | uint16 t12HB [ 64] IBSS_ATTR; // Bytes |
146 | uint16 t13HB [256] IDATA_ATTR LINE_ATTR; // Bytes | 139 | uint16 t13HB [256] IBSS_ATTR; // Bytes |
147 | uint16 t15HB [256] IDATA_ATTR LINE_ATTR; // Bytes | 140 | uint16 t15HB [256] IBSS_ATTR; // Bytes |
148 | uint16 t16HB [256] IDATA_ATTR LINE_ATTR; // Bytes | 141 | uint16 t16HB [256] IBSS_ATTR; // Bytes |
149 | uint16 t24HB [256] IDATA_ATTR LINE_ATTR; // Bytes | 142 | uint16 t24HB [256] IBSS_ATTR; // Bytes |
150 | uint8 t1l [ 4] IDATA_ATTR LINE_ATTR; // Bytes | 143 | uint8 t1l [ 4] IBSS_ATTR; // Bytes |
151 | uint8 t2l [ 9] IDATA_ATTR LINE_ATTR; // Bytes | 144 | uint8 t2l [ 9] IBSS_ATTR; // Bytes |
152 | uint8 t3l [ 9] IDATA_ATTR LINE_ATTR; // Bytes | 145 | uint8 t3l [ 9] IBSS_ATTR; // Bytes |
153 | uint8 t5l [ 16] IDATA_ATTR LINE_ATTR; // Bytes | 146 | uint8 t5l [ 16] IBSS_ATTR; // Bytes |
154 | uint8 t6l [ 16] IDATA_ATTR LINE_ATTR; // Bytes | 147 | uint8 t6l [ 16] IBSS_ATTR; // Bytes |
155 | uint8 t7l [ 36] IDATA_ATTR LINE_ATTR; // Bytes | 148 | uint8 t7l [ 36] IBSS_ATTR; // Bytes |
156 | uint8 t8l [ 36] IDATA_ATTR LINE_ATTR; // Bytes | 149 | uint8 t8l [ 36] IBSS_ATTR; // Bytes |
157 | uint8 t9l [ 36] IDATA_ATTR LINE_ATTR; // Bytes | 150 | uint8 t9l [ 36] IBSS_ATTR; // Bytes |
158 | uint8 t10l [ 64] IDATA_ATTR LINE_ATTR; // Bytes | 151 | uint8 t10l [ 64] IBSS_ATTR; // Bytes |
159 | uint8 t11l [ 64] IDATA_ATTR LINE_ATTR; // Bytes | 152 | uint8 t11l [ 64] IBSS_ATTR; // Bytes |
160 | uint8 t12l [ 64] IDATA_ATTR LINE_ATTR; // Bytes | 153 | uint8 t12l [ 64] IBSS_ATTR; // Bytes |
161 | uint8 t13l [256] IDATA_ATTR LINE_ATTR; // Bytes | 154 | uint8 t13l [256] IBSS_ATTR; // Bytes |
162 | uint8 t15l [256] IDATA_ATTR LINE_ATTR; // Bytes | 155 | uint8 t15l [256] IBSS_ATTR; // Bytes |
163 | uint8 t16l [256] IDATA_ATTR LINE_ATTR; // Bytes | 156 | uint8 t16l [256] IBSS_ATTR; // Bytes |
164 | uint8 t24l [256] IDATA_ATTR LINE_ATTR; // Bytes | 157 | uint8 t24l [256] IBSS_ATTR; // Bytes |
165 | struct huffcodetab ht [HTN] IDATA_ATTR LINE_ATTR; // Bytes | 158 | struct huffcodetab ht [HTN] IBSS_ATTR; // Bytes |
166 | 159 | ||
167 | static const uint8 ht_count1_const[2][2][16] = | 160 | static 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 */ |
708 | void open_bitstream(char *bs_filenam) /* name of the bit stream file */ | 701 | void 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. */ | ||
1331 | void mdct_int( int *in, int *out ) | 1327 | void 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; |