diff options
-rw-r--r-- | apps/codecs/demac/libdemac/predictor-cf.S | 223 |
1 files changed, 108 insertions, 115 deletions
diff --git a/apps/codecs/demac/libdemac/predictor-cf.S b/apps/codecs/demac/libdemac/predictor-cf.S index 0a1ffe9ead..cd2e07fd5e 100644 --- a/apps/codecs/demac/libdemac/predictor-cf.S +++ b/apps/codecs/demac/libdemac/predictor-cf.S | |||
@@ -69,16 +69,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA | |||
69 | | int count) | 69 | | int count) |
70 | 70 | ||
71 | predictor_decode_stereo: | 71 | predictor_decode_stereo: |
72 | lea.l (-14*4,%sp), %sp | 72 | lea.l (-12*4,%sp), %sp |
73 | movem.l %d2-%d7/%a2-%a6, (3*4,%sp) | 73 | movem.l %d2-%d7/%a2-%a6, (4,%sp) |
74 | 74 | ||
75 | movem.l (14*4+8,%sp), %d0-%d2 | 75 | movem.l (12*4+8,%sp), %a3-%a5 | %a3 = decoded0 |
76 | movem.l %d0-%d2, (%sp) | (%sp) = decoded0 | 76 | | %a4 = decoded1 |
77 | | (4,%sp) = decoded1 | 77 | move.l %a5, (%sp) | (%sp) = count |
78 | | (8,%sp) = count | ||
79 | 78 | ||
80 | move.l #0, %macsr | signed integer mode | 79 | move.l #0, %macsr | signed integer mode |
81 | move.l (14*4+4,%sp), %a6 | %a6 = p | 80 | move.l (12*4+4,%sp), %a6 | %a6 = p |
82 | move.l (%a6), %a5 | %a5 = p->buf | 81 | move.l (%a6), %a5 | %a5 = p->buf |
83 | 82 | ||
84 | .loop: | 83 | .loop: |
@@ -98,15 +97,15 @@ predictor_decode_stereo: | |||
98 | 97 | ||
99 | move.l %d2, (YDELAYA-4,%a5) | p->buf[YDELAYA-1] = %d2 | 98 | move.l %d2, (YDELAYA-4,%a5) | p->buf[YDELAYA-1] = %d2 |
100 | 99 | ||
101 | movem.l (YcoeffsA,%a6), %a0-%a3 | %a0 = p->YcoeffsA[0] | 100 | movem.l (YcoeffsA,%a6), %d4-%d7 | %d4 = p->YcoeffsA[0] |
102 | | %a1 = p->YcoeffsA[1] | 101 | | %d5 = p->YcoeffsA[1] |
103 | | %a2 = p->YcoeffsA[2] | 102 | | %d6 = p->YcoeffsA[2] |
104 | | %a3 = p->YcoeffsA[3] | 103 | | %d7 = p->YcoeffsA[3] |
105 | 104 | ||
106 | mac.l %d3, %a0, %acc0 | %acc0 = p->buf[YDELAYA] * p->YcoeffsA[0] | 105 | mac.l %d3, %d4, %acc0 | %acc0 = p->buf[YDELAYA] * p->YcoeffsA[0] |
107 | mac.l %d2, %a1, %acc0 | %acc0 += p->buf[YDELAYA-1] * p->YcoeffsA[1] | 106 | mac.l %d2, %d5, %acc0 | %acc0 += p->buf[YDELAYA-1] * p->YcoeffsA[1] |
108 | mac.l %d1, %a2, %acc0 | %acc0 += p->buf[YDELAYA-2] * p->YcoeffsA[2] | 107 | mac.l %d1, %d6, %acc0 | %acc0 += p->buf[YDELAYA-2] * p->YcoeffsA[2] |
109 | mac.l %d0, %a3, %acc0 | %acc0 += p->buf[YDELAYA-3] * p->YcoeffsA[3] | 108 | mac.l %d0, %d7, %acc0 | %acc0 += p->buf[YDELAYA-3] * p->YcoeffsA[3] |
110 | 109 | ||
111 | move.l %d3, (YDELAYA,%a5) | p->buf[YDELAYA] = %d3 | 110 | move.l %d3, (YDELAYA,%a5) | p->buf[YDELAYA] = %d3 |
112 | 111 | ||
@@ -151,17 +150,17 @@ predictor_decode_stereo: | |||
151 | 150 | ||
152 | move.l %d7, (YDELAYB-4,%a5) | p->buf[YDELAYB-1] = %d7 | 151 | move.l %d7, (YDELAYB-4,%a5) | p->buf[YDELAYB-1] = %d7 |
153 | 152 | ||
154 | movem.l (YcoeffsB,%a6), %d2/%a0-%a3 | %d2 = p->YcoeffsB[0] | 153 | movem.l (YcoeffsB,%a6), %d1-%d2/%a0-%a2 | %d1 = p->YcoeffsB[0] |
155 | | %a0 = p->YcoeffsB[1] | 154 | | %d2 = p->YcoeffsB[1] |
156 | | %a1 = p->YcoeffsB[2] | 155 | | %a0 = p->YcoeffsB[2] |
157 | | %a2 = p->YcoeffsB[3] | 156 | | %a1 = p->YcoeffsB[3] |
158 | | %a3 = p->YcoeffsB[4] | 157 | | %a2 = p->YcoeffsB[4] |
159 | 158 | ||
160 | mac.l %d3, %d2, %acc0 | %acc0 = p->buf[YDELAYB] * p->YcoeffsB[0] | 159 | mac.l %d3, %d1, %acc0 | %acc0 = p->buf[YDELAYB] * p->YcoeffsB[0] |
161 | mac.l %d7, %a0, %acc0 | %acc0 += p->buf[YDELAYB-1] * p->YcoeffsB[1] | 160 | mac.l %d7, %d2, %acc0 | %acc0 += p->buf[YDELAYB-1] * p->YcoeffsB[1] |
162 | mac.l %d6, %a1, %acc0 | %acc0 += p->buf[YDELAYB-2] * p->YcoeffsB[2] | 161 | mac.l %d6, %a0, %acc0 | %acc0 += p->buf[YDELAYB-2] * p->YcoeffsB[2] |
163 | mac.l %d5, %a2, %acc0 | %acc0 += p->buf[YDELAYB-3] * p->YcoeffsB[3] | 162 | mac.l %d5, %a1, %acc0 | %acc0 += p->buf[YDELAYB-3] * p->YcoeffsB[3] |
164 | mac.l %d4, %a3, %acc0 | %acc0 += p->buf[YDELAYB-4] * p->YcoeffsB[4] | 163 | mac.l %d4, %a2, %acc0 | %acc0 += p->buf[YDELAYB-4] * p->YcoeffsB[4] |
165 | 164 | ||
166 | move.l %d3, (YDELAYB, %a5) | p->buf[YDELAYB] = %d3 | 165 | move.l %d3, (YDELAYB, %a5) | p->buf[YDELAYB] = %d3 |
167 | 166 | ||
@@ -180,40 +179,37 @@ predictor_decode_stereo: | |||
180 | 1: | %d3 = SIGN(%d3) | 179 | 1: | %d3 = SIGN(%d3) |
181 | move.l %d3, (YADAPTCOEFFSB, %a5) | p->buf[YADAPTCOEFFSB] = %d3 | 180 | move.l %d3, (YADAPTCOEFFSB, %a5) | p->buf[YADAPTCOEFFSB] = %d3 |
182 | 181 | ||
183 | movclr.l %acc0, %d1 | 182 | movclr.l %acc0, %d4 |
184 | 183 | ||
185 | | %d0 still contains predictionA | 184 | | %d0 still contains predictionA |
186 | | %d1 contains predictionB | 185 | | %d4 contains predictionB |
187 | 186 | ||
188 | | Finish Predictor Y | 187 | | Finish Predictor Y |
189 | 188 | ||
190 | move.l (%sp), %a4 | %a4 = decoded0 | 189 | asr.l #1, %d4 |
191 | asr.l #1, %d1 | 190 | add.l %d4, %d0 | %d0 += (%d1 >> 1) |
192 | add.l %d1, %d0 | %d0 += (%d1 >> 1) | 191 | move.l (%a3), %d5 | %d5 = *decoded0 |
193 | move.l (%a4), %d5 | %d5 = *decoded0 | 192 | move.l %d5, %d4 | %d4 = %d5 |
194 | move.l %d5, %d1 | %d1 = %d5 | ||
195 | asr.l #8, %d0 | 193 | asr.l #8, %d0 |
196 | asr.l #2, %d0 | %d0 >>= 10 | 194 | asr.l #2, %d0 | %d0 >>= 10 |
197 | add.l %d0, %d1 | %d1 += %d0 | 195 | add.l %d0, %d4 | %d4 += %d0 |
198 | move.l %d1, (YlastA,%a6) | p->YlastA = %d1 | 196 | move.l %d4, (YlastA,%a6) | p->YlastA = %d4 |
199 | 197 | ||
200 | move.l (YfilterA,%a6), %d6 | %d6 = p->YfilterA | 198 | move.l (YfilterA,%a6), %d6 | %d6 = p->YfilterA |
201 | move.l %d6, %d0 | 199 | move.l %d6, %d0 |
202 | lsl.l #5, %d6 | 200 | lsl.l #5, %d6 |
203 | sub.l %d0, %d6 | %d6 = 31 * %d6 | 201 | sub.l %d0, %d6 | %d6 = 31 * %d6 |
204 | asr.l #5, %d6 | %d6 >>= 5 | 202 | asr.l #5, %d6 | %d6 >>= 5 |
205 | add.l %d6, %d1 | 203 | add.l %d6, %d4 |
206 | move.l %d1, (YfilterA,%a6) | p->YfilterA = %d1 | 204 | move.l %d4, (YfilterA,%a6) | p->YfilterA = %d4 |
207 | 205 | ||
208 | | %d1 contains p->YfilterA | 206 | | %d4 contains p->YfilterA |
209 | | %a4 contains decoded0 | ||
210 | | %d5 contains *decoded0 | 207 | | %d5 contains *decoded0 |
211 | 208 | ||
212 | | %d2, %a0, %a1, %a2, %a3 contain p->YcoeffsB[0..4] | 209 | | %d1, %d2, %a0, %a1, %a2 contain p->YcoeffsB[0..4] |
213 | | %d7, %d3 contain p->buf[YADAPTCOEFFSB-1] and p->buf[YADAPTCOEFFSB] | 210 | | %d7, %d3 contain p->buf[YADAPTCOEFFSB-1] and p->buf[YADAPTCOEFFSB] |
214 | 211 | ||
215 | move.l %d1, (%a4)+ | *(decoded0++) = %d1 (p->YfilterA) | 212 | move.l %d4, (%a3)+ | *(decoded0++) = %d1 (p->YfilterA) |
216 | move.l %a4, (%sp) | save decoded0 | ||
217 | tst.l %d5 | 213 | tst.l %d5 |
218 | beq.s 3f | 214 | beq.s 3f |
219 | 215 | ||
@@ -225,13 +221,13 @@ predictor_decode_stereo: | |||
225 | 221 | ||
226 | | *decoded0 > 0 | 222 | | *decoded0 > 0 |
227 | 223 | ||
228 | sub.l %d3, %d2 | %d2 = p->YcoeffsB[0] - p->buf[YADAPTCOEFFSB] | 224 | sub.l %d3, %d1 | %d1 = p->YcoeffsB[0] - p->buf[YADAPTCOEFFSB] |
229 | sub.l %d7, %a0 | %a0 = p->YcoeffsB[1] - p->buf[YADAPTCOEFFSB-1] | 225 | sub.l %d7, %d2 | %d2 = p->YcoeffsB[1] - p->buf[YADAPTCOEFFSB-1] |
230 | sub.l %d6, %a1 | %a1 = p->YcoeffsB[2] - p->buf[YADAPTCOEFFSB-2] | 226 | sub.l %d6, %a0 | %a0 = p->YcoeffsB[2] - p->buf[YADAPTCOEFFSB-2] |
231 | sub.l %d5, %a2 | %a2 = p->YcoeffsB[3] - p->buf[YADAPTCOEFFSB-3] | 227 | sub.l %d5, %a1 | %a1 = p->YcoeffsB[3] - p->buf[YADAPTCOEFFSB-3] |
232 | sub.l %d4, %a3 | %a3 = p->YcoeffsB[4] - p->buf[YADAPTCOEFFSB-4] | 228 | sub.l %d4, %a2 | %a2 = p->YcoeffsB[4] - p->buf[YADAPTCOEFFSB-4] |
233 | 229 | ||
234 | movem.l %d2/%a0-%a3, (YcoeffsB,%a6) | Save p->YcoeffsB[] | 230 | movem.l %d1-%d2/%a0-%a2, (YcoeffsB,%a6) | Save p->YcoeffsB[] |
235 | 231 | ||
236 | movem.l (YcoeffsA,%a6), %d4-%d7 | %d4 = p->YcoeffsA[0] | 232 | movem.l (YcoeffsA,%a6), %d4-%d7 | %d4 = p->YcoeffsA[0] |
237 | | %d5 = p->YcoeffsA[1] | 233 | | %d5 = p->YcoeffsA[1] |
@@ -252,13 +248,13 @@ predictor_decode_stereo: | |||
252 | 248 | ||
253 | 1: | *decoded0 < 0 | 249 | 1: | *decoded0 < 0 |
254 | 250 | ||
255 | add.l %d3, %d2 | %d2 = p->YcoeffsB[0] + p->buf[YADAPTCOEFFSB] | 251 | add.l %d3, %d1 | %d1 = p->YcoeffsB[0] + p->buf[YADAPTCOEFFSB] |
256 | add.l %d7, %a0 | %a0 = p->YcoeffsB[1] + p->buf[YADAPTCOEFFSB-1] | 252 | add.l %d7, %d2 | %d2 = p->YcoeffsB[1] + p->buf[YADAPTCOEFFSB-1] |
257 | add.l %d6, %a1 | %a1 = p->YcoeffsB[2] + p->buf[YADAPTCOEFFSB-2] | 253 | add.l %d6, %a0 | %a0 = p->YcoeffsB[2] + p->buf[YADAPTCOEFFSB-2] |
258 | add.l %d5, %a2 | %a2 = p->YcoeffsB[3] + p->buf[YADAPTCOEFFSB-3] | 254 | add.l %d5, %a1 | %a1 = p->YcoeffsB[3] + p->buf[YADAPTCOEFFSB-3] |
259 | add.l %d4, %a3 | %a3 = p->YcoeffsB[4] + p->buf[YADAPTCOEFFSB-4] | 255 | add.l %d4, %a2 | %a2 = p->YcoeffsB[4] + p->buf[YADAPTCOEFFSB-4] |
260 | 256 | ||
261 | movem.l %d2/%a0-%a3, (YcoeffsB,%a6) | Save p->YcoeffsB[] | 257 | movem.l %d1-%d2/%a0-%a2, (YcoeffsB,%a6) | Save p->YcoeffsB[] |
262 | 258 | ||
263 | movem.l (YcoeffsA,%a6), %d4-%d7 | %d4 = p->YcoeffsA[0] | 259 | movem.l (YcoeffsA,%a6), %d4-%d7 | %d4 = p->YcoeffsA[0] |
264 | | %d5 = p->YcoeffsA[1] | 260 | | %d5 = p->YcoeffsA[1] |
@@ -295,15 +291,15 @@ predictor_decode_stereo: | |||
295 | 291 | ||
296 | move.l %d2, (XDELAYA-4,%a5) | p->buf[XDELAYA-1] = %d2 | 292 | move.l %d2, (XDELAYA-4,%a5) | p->buf[XDELAYA-1] = %d2 |
297 | 293 | ||
298 | movem.l (XcoeffsA,%a6), %a0-%a3 | %a0 = p->XcoeffsA[0] | 294 | movem.l (XcoeffsA,%a6), %d4-%d7 | %d4 = p->XcoeffsA[0] |
299 | | %a1 = p->XcoeffsA[1] | 295 | | %d5 = p->XcoeffsA[1] |
300 | | %a2 = p->XcoeffsA[2] | 296 | | %d6 = p->XcoeffsA[2] |
301 | | %a3 = p->XcoeffsA[3] | 297 | | %d7 = p->XcoeffsA[3] |
302 | 298 | ||
303 | mac.l %d3, %a0, %acc0 | %acc0 = p->buf[XDELAYA] * p->XcoeffsA[0] | 299 | mac.l %d3, %d4, %acc0 | %acc0 = p->buf[XDELAYA] * p->XcoeffsA[0] |
304 | mac.l %d2, %a1, %acc0 | %acc0 += p->buf[XDELAYA-1] * p->XcoeffsA[1] | 300 | mac.l %d2, %d5, %acc0 | %acc0 += p->buf[XDELAYA-1] * p->XcoeffsA[1] |
305 | mac.l %d1, %a2, %acc0 | %acc0 += p->buf[XDELAYA-2] * p->XcoeffsA[2] | 301 | mac.l %d1, %d6, %acc0 | %acc0 += p->buf[XDELAYA-2] * p->XcoeffsA[2] |
306 | mac.l %d0, %a3, %acc0 | %acc0 += p->buf[XDELAYA-3] * p->XcoeffsA[3] | 302 | mac.l %d0, %d7, %acc0 | %acc0 += p->buf[XDELAYA-3] * p->XcoeffsA[3] |
307 | 303 | ||
308 | move.l %d3, (XDELAYA,%a5) | p->buf[XDELAYA] = %d3 | 304 | move.l %d3, (XDELAYA,%a5) | p->buf[XDELAYA] = %d3 |
309 | 305 | ||
@@ -348,17 +344,17 @@ predictor_decode_stereo: | |||
348 | 344 | ||
349 | move.l %d7, (XDELAYB-4,%a5) | p->buf[XDELAYB-1] = %d7 | 345 | move.l %d7, (XDELAYB-4,%a5) | p->buf[XDELAYB-1] = %d7 |
350 | 346 | ||
351 | movem.l (XcoeffsB,%a6), %d2/%a0-%a3 | %d2 = p->XcoeffsB[0] | 347 | movem.l (XcoeffsB,%a6), %d1-%d2/%a0-%a2 | %d1 = p->XcoeffsB[0] |
352 | | %a0 = p->XcoeffsB[1] | 348 | | %d2 = p->XcoeffsB[1] |
353 | | %a1 = p->XcoeffsB[2] | 349 | | %a0 = p->XcoeffsB[2] |
354 | | %a2 = p->XcoeffsB[3] | 350 | | %a1 = p->XcoeffsB[3] |
355 | | %a3 = p->XcoeffsB[4] | 351 | | %a2 = p->XcoeffsB[4] |
356 | 352 | ||
357 | mac.l %d3, %d2, %acc0 | %acc0 = p->buf[XDELAYB] * p->XcoeffsB[0] | 353 | mac.l %d3, %d1, %acc0 | %acc0 = p->buf[XDELAYB] * p->XcoeffsB[0] |
358 | mac.l %d7, %a0, %acc0 | %acc0 += p->buf[XDELAYB-1] * p->XcoeffsB[1] | 354 | mac.l %d7, %d2, %acc0 | %acc0 += p->buf[XDELAYB-1] * p->XcoeffsB[1] |
359 | mac.l %d6, %a1, %acc0 | %acc0 += p->buf[XDELAYB-2] * p->XcoeffsB[2] | 355 | mac.l %d6, %a0, %acc0 | %acc0 += p->buf[XDELAYB-2] * p->XcoeffsB[2] |
360 | mac.l %d5, %a2, %acc0 | %acc0 += p->buf[XDELAYB-3] * p->XcoeffsB[3] | 356 | mac.l %d5, %a1, %acc0 | %acc0 += p->buf[XDELAYB-3] * p->XcoeffsB[3] |
361 | mac.l %d4, %a3, %acc0 | %acc0 += p->buf[XDELAYB-4] * p->XcoeffsB[4] | 357 | mac.l %d4, %a2, %acc0 | %acc0 += p->buf[XDELAYB-4] * p->XcoeffsB[4] |
362 | 358 | ||
363 | move.l %d3, (XDELAYB, %a5) | p->buf[XDELAYB] = %d3 | 359 | move.l %d3, (XDELAYB, %a5) | p->buf[XDELAYB] = %d3 |
364 | 360 | ||
@@ -378,40 +374,37 @@ predictor_decode_stereo: | |||
378 | 1: | %d3 = SIGN(%d3) | 374 | 1: | %d3 = SIGN(%d3) |
379 | move.l %d3, (XADAPTCOEFFSB, %a5) | p->buf[XADAPTCOEFFSB] = %d3 | 375 | move.l %d3, (XADAPTCOEFFSB, %a5) | p->buf[XADAPTCOEFFSB] = %d3 |
380 | 376 | ||
381 | movclr.l %acc0, %d1 | 377 | movclr.l %acc0, %d4 |
382 | 378 | ||
383 | | %d0 still contains predictionA | 379 | | %d0 still contains predictionA |
384 | | %d1 contains predictionB | 380 | | %d4 contains predictionB |
385 | 381 | ||
386 | | Finish Predictor X | 382 | | Finish Predictor X |
387 | 383 | ||
388 | move.l (4,%sp), %a4 | %a4 = decoded1 | 384 | asr.l #1, %d4 |
389 | asr.l #1, %d1 | 385 | add.l %d4, %d0 | %d0 += (%d1 >> 1) |
390 | add.l %d1, %d0 | %d0 += (%d1 >> 1) | ||
391 | move.l (%a4), %d5 | %d5 = *decoded1 | 386 | move.l (%a4), %d5 | %d5 = *decoded1 |
392 | move.l %d5, %d1 | %d1 = %d5 | 387 | move.l %d5, %d4 | %d4 = %d5 |
393 | asr.l #8, %d0 | 388 | asr.l #8, %d0 |
394 | asr.l #2, %d0 | %d0 >>= 10 | 389 | asr.l #2, %d0 | %d0 >>= 10 |
395 | add.l %d0, %d1 | %d1 += %d0 | 390 | add.l %d0, %d4 | %d4 += %d0 |
396 | move.l %d1, (XlastA,%a6) | p->XlastA = %d1 | 391 | move.l %d4, (XlastA,%a6) | p->XlastA = %d1 |
397 | 392 | ||
398 | move.l (XfilterA,%a6), %d6 | %d6 = p->XfilterA | 393 | move.l (XfilterA,%a6), %d6 | %d6 = p->XfilterA |
399 | move.l %d6, %d0 | 394 | move.l %d6, %d0 |
400 | lsl.l #5, %d6 | 395 | lsl.l #5, %d6 |
401 | sub.l %d0, %d6 | %d6 = 31 * %d6 | 396 | sub.l %d0, %d6 | %d6 = 31 * %d6 |
402 | asr.l #5, %d6 | %d6 >>= 5 | 397 | asr.l #5, %d6 | %d6 >>= 5 |
403 | add.l %d6, %d1 | 398 | add.l %d6, %d4 |
404 | move.l %d1, (XfilterA,%a6) | p->XfilterA = %d6 | 399 | move.l %d4, (XfilterA,%a6) | p->XfilterA = %d6 |
405 | 400 | ||
406 | | %d1 contains p->XfilterA | 401 | | %d4 contains p->XfilterA |
407 | | %a4 contains decoded1 | ||
408 | | %d5 contains *decoded1 | 402 | | %d5 contains *decoded1 |
409 | 403 | ||
410 | | %d2, %a0, %a1, %a2, %a3 contain p->XcoeffsB[0..4] | 404 | | %d1, %d2, %a0, %a1, %a2 contain p->XcoeffsB[0..4] |
411 | | %d7, %d3 contain p->buf[XADAPTCOEFFSB-1] and p->buf[XADAPTCOEFFSB] | 405 | | %d7, %d3 contain p->buf[XADAPTCOEFFSB-1] and p->buf[XADAPTCOEFFSB] |
412 | 406 | ||
413 | move.l %d1, (%a4)+ | *(decoded1++) = %d1 (p->XfilterA) | 407 | move.l %d4, (%a4)+ | *(decoded1++) = %d1 (p->XfilterA) |
414 | move.l %a4, (4,%sp) | save decoded1 | ||
415 | tst.l %d5 | 408 | tst.l %d5 |
416 | beq.s 3f | 409 | beq.s 3f |
417 | 410 | ||
@@ -423,13 +416,13 @@ predictor_decode_stereo: | |||
423 | 416 | ||
424 | | *decoded1 > 0 | 417 | | *decoded1 > 0 |
425 | 418 | ||
426 | sub.l %d3, %d2 | %d2 = p->XcoeffsB[0] - p->buf[XADAPTCOEFFSB] | 419 | sub.l %d3, %d1 | %d1 = p->XcoeffsB[0] - p->buf[XADAPTCOEFFSB] |
427 | sub.l %d7, %a0 | %a0 = p->XcoeffsB[1] - p->buf[XADAPTCOEFFSB-1] | 420 | sub.l %d7, %d2 | %d2 = p->XcoeffsB[1] - p->buf[XADAPTCOEFFSB-1] |
428 | sub.l %d6, %a1 | %a1 = p->XcoeffsB[2] - p->buf[XADAPTCOEFFSB-2] | 421 | sub.l %d6, %a0 | %a0 = p->XcoeffsB[2] - p->buf[XADAPTCOEFFSB-2] |
429 | sub.l %d5, %a2 | %a2 = p->XcoeffsB[3] - p->buf[XADAPTCOEFFSB-3] | 422 | sub.l %d5, %a1 | %a1 = p->XcoeffsB[3] - p->buf[XADAPTCOEFFSB-3] |
430 | sub.l %d4, %a3 | %a3 = p->XcoeffsB[4] - p->buf[XADAPTCOEFFSB-4] | 423 | sub.l %d4, %a2 | %a2 = p->XcoeffsB[4] - p->buf[XADAPTCOEFFSB-4] |
431 | 424 | ||
432 | movem.l %d2/%a0-%a3, (XcoeffsB,%a6) | Save p->XcoeffsB[] | 425 | movem.l %d1-%d2/%a0-%a2, (XcoeffsB,%a6) | Save p->XcoeffsB[] |
433 | 426 | ||
434 | movem.l (XcoeffsA,%a6), %d4-%d7 | %d4 = p->XcoeffsA[0] | 427 | movem.l (XcoeffsA,%a6), %d4-%d7 | %d4 = p->XcoeffsA[0] |
435 | | %d5 = p->XcoeffsA[1] | 428 | | %d5 = p->XcoeffsA[1] |
@@ -450,13 +443,13 @@ predictor_decode_stereo: | |||
450 | 443 | ||
451 | 1: | *decoded1 < 0 | 444 | 1: | *decoded1 < 0 |
452 | 445 | ||
453 | add.l %d3, %d2 | %d2 = p->XcoeffsB[0] + p->buf[XADAPTCOEFFSB] | 446 | add.l %d3, %d1 | %d1 = p->XcoeffsB[0] + p->buf[XADAPTCOEFFSB] |
454 | add.l %d7, %a0 | %a0 = p->XcoeffsB[1] + p->buf[XADAPTCOEFFSB-1] | 447 | add.l %d7, %d2 | %d2 = p->XcoeffsB[1] + p->buf[XADAPTCOEFFSB-1] |
455 | add.l %d6, %a1 | %a1 = p->XcoeffsB[2] + p->buf[XADAPTCOEFFSB-2] | 448 | add.l %d6, %a0 | %a0 = p->XcoeffsB[2] + p->buf[XADAPTCOEFFSB-2] |
456 | add.l %d5, %a2 | %a2 = p->XcoeffsB[3] + p->buf[XADAPTCOEFFSB-3] | 449 | add.l %d5, %a1 | %a1 = p->XcoeffsB[3] + p->buf[XADAPTCOEFFSB-3] |
457 | add.l %d4, %a3 | %a3 = p->XcoeffsB[4] + p->buf[XADAPTCOEFFSB-4] | 450 | add.l %d4, %a2 | %a2 = p->XcoeffsB[4] + p->buf[XADAPTCOEFFSB-4] |
458 | 451 | ||
459 | movem.l %d2/%a0-%a3, (XcoeffsB,%a6) | Save p->XcoeffsB[] | 452 | movem.l %d1-%d2/%a0-%a2, (XcoeffsB,%a6) | Save p->XcoeffsB[] |
460 | 453 | ||
461 | movem.l (XcoeffsA,%a6), %d4-%d7 | %d4 = p->XcoeffsA[0] | 454 | movem.l (XcoeffsA,%a6), %d4-%d7 | %d4 = p->XcoeffsA[0] |
462 | | %d5 = p->XcoeffsA[1] | 455 | | %d5 = p->XcoeffsA[1] |
@@ -482,42 +475,42 @@ predictor_decode_stereo: | |||
482 | 475 | ||
483 | addq.l #4, %a5 | p->buf++ | 476 | addq.l #4, %a5 | p->buf++ |
484 | 477 | ||
485 | lea.l (historybuffer+PREDICTOR_HISTORY_SIZE*4,%a6), %a3 | 478 | lea.l (historybuffer+PREDICTOR_HISTORY_SIZE*4,%a6), %a2 |
486 | | %a3 = &p->historybuffer[PREDICTOR_HISTORY_SIZE] | 479 | | %a2 = &p->historybuffer[PREDICTOR_HISTORY_SIZE] |
487 | 480 | ||
488 | cmp.l %a3, %a5 | 481 | cmp.l %a2, %a5 |
489 | beq.s .move_hist | The history buffer is full, we need to do a memmove | 482 | beq.s .move_hist | The history buffer is full, we need to do a memmove |
490 | 483 | ||
491 | subq.l #1, (8,%sp) | decrease loop count | 484 | subq.l #1, (%sp) | decrease loop count |
492 | bne.w .loop | 485 | bne.w .loop |
493 | 486 | ||
494 | .done: | 487 | .done: |
495 | move.l %a5, (%a6) | Save value of p->buf | 488 | move.l %a5, (%a6) | Save value of p->buf |
496 | movem.l (3*4,%sp), %d2-%d7/%a2-%a6 | 489 | movem.l (4,%sp), %d2-%d7/%a2-%a6 |
497 | lea.l (14*4,%sp), %sp | 490 | lea.l (12*4,%sp), %sp |
498 | rts | 491 | rts |
499 | 492 | ||
500 | .move_hist: | 493 | .move_hist: |
501 | lea.l (historybuffer,%a6), %a3 | 494 | lea.l (historybuffer,%a6), %a2 |
502 | 495 | ||
503 | | dest = %a3 (p->historybuffer) | 496 | | dest = %a2 (p->historybuffer) |
504 | | src = %a5 (p->buf) | 497 | | src = %a5 (p->buf) |
505 | | n = 200 | 498 | | n = 200 |
506 | 499 | ||
507 | movem.l (%a5), %d0-%d7/%a0-%a1 | 40 bytes | 500 | movem.l (%a5), %d0-%d7/%a0-%a1 | 40 bytes |
508 | movem.l %d0-%d7/%a0-%a1, (%a3) | 501 | movem.l %d0-%d7/%a0-%a1, (%a2) |
509 | movem.l (40,%a5), %d0-%d7/%a0-%a1 | 40 bytes | 502 | movem.l (40,%a5), %d0-%d7/%a0-%a1 | 40 bytes |
510 | movem.l %d0-%d7/%a0-%a1, (40,%a3) | 503 | movem.l %d0-%d7/%a0-%a1, (40,%a2) |
511 | movem.l (80,%a5), %d0-%d7/%a0-%a1 | 40 bytes | 504 | movem.l (80,%a5), %d0-%d7/%a0-%a1 | 40 bytes |
512 | movem.l %d0-%d7/%a0-%a1, (80,%a3) | 505 | movem.l %d0-%d7/%a0-%a1, (80,%a2) |
513 | movem.l (120,%a5), %d0-%d7/%a0-%a1 | 40 bytes | 506 | movem.l (120,%a5), %d0-%d7/%a0-%a1 | 40 bytes |
514 | movem.l %d0-%d7/%a0-%a1, (120,%a3) | 507 | movem.l %d0-%d7/%a0-%a1, (120,%a2) |
515 | movem.l (160,%a5), %d0-%d7/%a0-%a1 | 40 bytes | 508 | movem.l (160,%a5), %d0-%d7/%a0-%a1 | 40 bytes |
516 | movem.l %d0-%d7/%a0-%a1, (160,%a3) | 509 | movem.l %d0-%d7/%a0-%a1, (160,%a2) |
517 | 510 | ||
518 | move.l %a3, %a5 | p->buf = &p->historybuffer[0] | 511 | move.l %a2, %a5 | p->buf = &p->historybuffer[0] |
519 | 512 | ||
520 | subq.l #1, (8,%sp) | decrease loop count | 513 | subq.l #1, (%sp) | decrease loop count |
521 | bne.w .loop | 514 | bne.w .loop |
522 | 515 | ||
523 | bra.s .done | 516 | bra.s .done |