summaryrefslogtreecommitdiff
path: root/lib/rbcodec
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rbcodec')
-rw-r--r--lib/rbcodec/dsp/dsp_arm.S56
-rw-r--r--lib/rbcodec/dsp/dsp_arm_v6.S6
-rw-r--r--lib/rbcodec/dsp/dsp_cf.S10
3 files changed, 36 insertions, 36 deletions
diff --git a/lib/rbcodec/dsp/dsp_arm.S b/lib/rbcodec/dsp/dsp_arm.S
index 7e360749a3..685aca411c 100644
--- a/lib/rbcodec/dsp/dsp_arm.S
+++ b/lib/rbcodec/dsp/dsp_arm.S
@@ -73,17 +73,17 @@ channels_process_sound_chan_mono:
73 .type channels_process_sound_chan_custom, %function 73 .type channels_process_sound_chan_custom, %function
74channels_process_sound_chan_custom: 74channels_process_sound_chan_custom:
75 stmfd sp!, { r4-r10, lr } 75 stmfd sp!, { r4-r10, lr }
76 76
77 ldr r3, =dsp_sw_gain 77 ldr r3, =dsp_sw_gain
78 ldr r4, =dsp_sw_cross 78 ldr r4, =dsp_sw_cross
79 79
80 ldmia r1, { r1, r2 } @ r1 = buf[0], r2 = buf[1] 80 ldmia r1, { r1, r2 } @ r1 = buf[0], r2 = buf[1]
81 ldr r3, [r3] @ r3 = dsp_sw_gain 81 ldr r3, [r3] @ r3 = dsp_sw_gain
82 ldr r4, [r4] @ r4 = dsp_sw_cross 82 ldr r4, [r4] @ r4 = dsp_sw_cross
83 83
84 subs r0, r0, #1 84 subs r0, r0, #1
85 beq .custom_single_sample @ Zero? Only one sample! 85 beq .custom_single_sample @ Zero? Only one sample!
86 86
87.custom_loop: 87.custom_loop:
88 ldmia r1, { r5, r6 } @ r5 = Li0, r6 = Li1 88 ldmia r1, { r5, r6 } @ r5 = Li0, r6 = Li1
89 ldmia r2, { r7, r8 } @ r7 = Ri0, r8 = Ri1 89 ldmia r2, { r7, r8 } @ r7 = Ri0, r8 = Ri1
@@ -94,29 +94,29 @@ channels_process_sound_chan_custom:
94 smull r12, r14, r7, r3 @ Rc0 = Ri0*gain 94 smull r12, r14, r7, r3 @ Rc0 = Ri0*gain
95 smlal r9, r10, r7, r4 @ Lc0 += Ri0*cross 95 smlal r9, r10, r7, r4 @ Lc0 += Ri0*cross
96 smlal r12, r14, r5, r4 @ Rc0 += Li0*cross 96 smlal r12, r14, r5, r4 @ Rc0 += Li0*cross
97 97
98 mov r9, r9, lsr #31 @ Convert to s0.31 98 mov r9, r9, lsr #31 @ Convert to s0.31
99 mov r12, r12, lsr #31 99 mov r12, r12, lsr #31
100 orr r5, r9, r10, asl #1 100 orr r5, r9, r10, asl #1
101 orr r7, r12, r14, asl #1 101 orr r7, r12, r14, asl #1
102 102
103 smull r9, r10, r6, r3 @ Lc1 = Li1*gain 103 smull r9, r10, r6, r3 @ Lc1 = Li1*gain
104 smull r12, r14, r8, r3 @ Rc1 = Ri1*gain 104 smull r12, r14, r8, r3 @ Rc1 = Ri1*gain
105 smlal r9, r10, r8, r4 @ Lc1 += Ri1*cross 105 smlal r9, r10, r8, r4 @ Lc1 += Ri1*cross
106 smlal r12, r14, r6, r4 @ Rc1 += Li1*cross 106 smlal r12, r14, r6, r4 @ Rc1 += Li1*cross
107 107
108 mov r9, r9, lsr #31 @ Convert to s0.31 108 mov r9, r9, lsr #31 @ Convert to s0.31
109 mov r12, r12, lsr #31 109 mov r12, r12, lsr #31
110 orr r6, r9, r10, asl #1 110 orr r6, r9, r10, asl #1
111 orr r8, r12, r14, asl #1 111 orr r8, r12, r14, asl #1
112 112
113 stmia r1!, { r5, r6 } @ Store Lc0, Lc1 113 stmia r1!, { r5, r6 } @ Store Lc0, Lc1
114 stmia r2!, { r7, r8 } @ Store Rc0, Rc1 114 stmia r2!, { r7, r8 } @ Store Rc0, Rc1
115 115
116 bgt .custom_loop 116 bgt .custom_loop
117 117
118 ldmpc cond=lt, regs=r4-r10 @ < 0? even count 118 ldmpc cond=lt, regs=r4-r10 @ < 0? even count
119 119
120.custom_single_sample: 120.custom_single_sample:
121 ldr r5, [r1] @ handle odd sample 121 ldr r5, [r1] @ handle odd sample
122 ldr r7, [r2] 122 ldr r7, [r2]
@@ -218,16 +218,16 @@ sample_output_mono:
218 mov r12, r6, asr #15 218 mov r12, r6, asr #15
219 teq r12, r12, asr #31 219 teq r12, r12, asr #31
220 eorne r6, r14, r6, asr #31 @ Clip (-32768...+32767) 220 eorne r6, r14, r6, asr #31 @ Clip (-32768...+32767)
221 221
222 and r5, r5, r14, lsr #16 222 and r5, r5, r14, lsr #16
223 and r6, r6, r14, lsr #16 223 and r6, r6, r14, lsr #16
224 orr r5, r5, r5, lsl #16 @ pack first 2 halfwords into 1 word 224 orr r5, r5, r5, lsl #16 @ pack first 2 halfwords into 1 word
225 orr r6, r6, r6, lsl #16 @ pack last 2 halfwords into 1 word 225 orr r6, r6, r6, lsl #16 @ pack last 2 halfwords into 1 word
226 stmia r3!, { r5, r6 } 226 stmia r3!, { r5, r6 }
227 227
228 subs r0, r0, #2 228 subs r0, r0, #2
229 bgt .somloop 229 bgt .somloop
230 230
231 ldmpc cond=lt, regs=r4-r6 @ even 'count'? return 231 ldmpc cond=lt, regs=r4-r6 @ even 'count'? return
232 232
233.som_singlesample: 233.som_singlesample:
@@ -244,7 +244,7 @@ sample_output_mono:
244 244
245 ldmpc regs=r4-r6 245 ldmpc regs=r4-r6
246 .size sample_output_mono, .-sample_output_mono 246 .size sample_output_mono, .-sample_output_mono
247 247
248/**************************************************************************** 248/****************************************************************************
249 * void sample_output_stereo(int count, struct dsp_data *data, 249 * void sample_output_stereo(int count, struct dsp_data *data,
250 * const int32_t *src[], int16_t *dst) 250 * const int32_t *src[], int16_t *dst)
@@ -263,7 +263,7 @@ sample_output_stereo:
263 mov r4, #1 263 mov r4, #1
264 mov r4, r4, lsl r1 @ r4 = 1 << (scale-1) 264 mov r4, r4, lsl r1 @ r4 = 1 << (scale-1)
265 mov r4, r4, lsr #1 @ 265 mov r4, r4, lsr #1 @
266 266
267 mvn r14, #0x8000 @ r14 = 0xffff7fff, needed for 267 mvn r14, #0x8000 @ r14 = 0xffff7fff, needed for
268 @ clipping and masking 268 @ clipping and masking
269 subs r0, r0, #1 @ 269 subs r0, r0, #1 @
@@ -283,7 +283,7 @@ sample_output_stereo:
283 mov r12, r7, asr #15 283 mov r12, r7, asr #15
284 teq r12, r12, asr #31 284 teq r12, r12, asr #31
285 eorne r7, r14, r7, asr #31 @ Clip (-32768...+32767) 285 eorne r7, r14, r7, asr #31 @ Clip (-32768...+32767)
286 286
287 add r8, r8, r4 @ r8 = (r8 + 1<<(scale-1)) >> scale 287 add r8, r8, r4 @ r8 = (r8 + 1<<(scale-1)) >> scale
288 mov r8, r8, asr r1 288 mov r8, r8, asr r1
289 mov r12, r8, asr #15 289 mov r12, r8, asr #15
@@ -294,7 +294,7 @@ sample_output_stereo:
294 mov r12, r9, asr #15 294 mov r12, r9, asr #15
295 teq r12, r12, asr #31 295 teq r12, r12, asr #31
296 eorne r9, r14, r9, asr #31 @ Clip (-32768...+32767) 296 eorne r9, r14, r9, asr #31 @ Clip (-32768...+32767)
297 297
298 and r6, r6, r14, lsr #16 @ pack first 2 halfwords into 1 word 298 and r6, r6, r14, lsr #16 @ pack first 2 halfwords into 1 word
299 orr r8, r6, r8, asl #16 299 orr r8, r6, r8, asl #16
300 and r7, r7, r14, lsr #16 @ pack last 2 halfwords into 1 word 300 and r7, r7, r14, lsr #16 @ pack last 2 halfwords into 1 word
@@ -307,7 +307,7 @@ sample_output_stereo:
307 307
308 ldmpc cond=lt, regs=r4-r9 @ even 'count'? return 308 ldmpc cond=lt, regs=r4-r9 @ even 'count'? return
309 309
310.sos_singlesample: 310.sos_singlesample:
311 ldr r6, [r2] @ left odd sample 311 ldr r6, [r2] @ left odd sample
312 ldr r8, [r5] @ right odd sample 312 ldr r8, [r5] @ right odd sample
313 313
@@ -321,7 +321,7 @@ sample_output_stereo:
321 mov r12, r8, asr #15 321 mov r12, r8, asr #15
322 teq r12, r12, asr #31 322 teq r12, r12, asr #31
323 eorne r8, r14, r8, asr #31 @ Clip (-32768...+32767) 323 eorne r8, r14, r8, asr #31 @ Clip (-32768...+32767)
324 324
325 and r6, r6, r14, lsr #16 @ pack 2 halfwords into 1 word 325 and r6, r6, r14, lsr #16 @ pack 2 halfwords into 1 word
326 orr r8, r6, r8, asl #16 326 orr r8, r6, r8, asl #16
327 327
@@ -329,19 +329,19 @@ sample_output_stereo:
329 329
330 ldmpc regs=r4-r9 330 ldmpc regs=r4-r9
331 .size sample_output_stereo, .-sample_output_stereo 331 .size sample_output_stereo, .-sample_output_stereo
332#endif /* ARM_ARCH < 6 */ 332#endif /* ARM_ARCH < 6 */
333 333
334/**************************************************************************** 334/****************************************************************************
335 * void apply_crossfeed(int count, int32_t* src[]) 335 * void apply_crossfeed(int count, int32_t* src[])
336 */ 336 */
337 .section .text 337 .section .text
338 .global apply_crossfeed 338 .global apply_crossfeed
339apply_crossfeed: 339apply_crossfeed:
340 @ unfortunately, we ended up in a bit of a register squeeze here, and need 340 @ unfortunately, we ended up in a bit of a register squeeze here, and need
341 @ to keep the count on the stack :/ 341 @ to keep the count on the stack :/
342 stmdb sp!, { r4-r11, lr } @ stack modified regs 342 stmdb sp!, { r4-r11, lr } @ stack modified regs
343 ldmia r1, { r2-r3 } @ r2 = src[0], r3 = src[1] 343 ldmia r1, { r2-r3 } @ r2 = src[0], r3 = src[1]
344 344
345 ldr r1, =crossfeed_data 345 ldr r1, =crossfeed_data
346 ldmia r1!, { r4-r11 } @ load direct gain and filter data 346 ldmia r1!, { r4-r11 } @ load direct gain and filter data
347 mov r12, r0 @ better to ldm delay + count later 347 mov r12, r0 @ better to ldm delay + count later
@@ -361,7 +361,7 @@ apply_crossfeed:
361 smlal r14, r1, r5, r8 @ acc += b0*dr[n] 361 smlal r14, r1, r5, r8 @ acc += b0*dr[n]
362 mov r9, r1, lsl #1 @ fix format for filter history 362 mov r9, r1, lsl #1 @ fix format for filter history
363 ldr r12, [r2] @ load left input 363 ldr r12, [r2] @ load left input
364 smlal r14, r1, r4, r12 @ acc += gain*x_l[n] 364 smlal r14, r1, r4, r12 @ acc += gain*x_l[n]
365 mov r1, r1, lsl #1 @ fix format 365 mov r1, r1, lsl #1 @ fix format
366 str r1, [r2], #4 @ save result 366 str r1, [r2], #4 @ save result
367 367
@@ -380,11 +380,11 @@ apply_crossfeed:
380 380
381 cmp r0, r12 @ need to wrap to start of delay? 381 cmp r0, r12 @ need to wrap to start of delay?
382 subeq r0, r0, #13*4*2 @ wrap back delay line ptr to start 382 subeq r0, r0, #13*4*2 @ wrap back delay line ptr to start
383 383
384 subs r14, r14, #1 @ are we finished? 384 subs r14, r14, #1 @ are we finished?
385 strne r14, [sp, #4] @ nope, save count back to stack 385 strne r14, [sp, #4] @ nope, save count back to stack
386 bne .cfloop 386 bne .cfloop
387 387
388 @ save data back to struct 388 @ save data back to struct
389 ldr r12, =crossfeed_data + 4*4 389 ldr r12, =crossfeed_data + 4*4
390 stmia r12, { r8-r11 } @ save filter history 390 stmia r12, { r8-r11 } @ save filter history
@@ -412,7 +412,7 @@ dsp_downsample:
412 ldr r8, [r3, r5, lsl #2] @ r8 = d = dst[ch - 1] 412 ldr r8, [r3, r5, lsl #2] @ r8 = d = dst[ch - 1]
413 add r9, r4, #4 @ r9 = &last_sample[0] 413 add r9, r4, #4 @ r9 = &last_sample[0]
414 ldr r10, [r9, r5, lsl #2] @ r10 = last_sample[ch - 1] 414 ldr r10, [r9, r5, lsl #2] @ r10 = last_sample[ch - 1]
415 sub r11, r0, #1 415 sub r11, r0, #1
416 ldr r14, [r7, r11, lsl #2] @ load last sample in s[] ... 416 ldr r14, [r7, r11, lsl #2] @ load last sample in s[] ...
417 str r14, [r9, r5, lsl #2] @ and write as next frame's last_sample 417 str r14, [r9, r5, lsl #2] @ and write as next frame's last_sample
418 movs r9, r1, lsr #16 @ r9 = pos = phase >> 16 418 movs r9, r1, lsr #16 @ r9 = pos = phase >> 16
@@ -469,7 +469,7 @@ dsp_upsample:
469 ldr r8, [r3, r5, lsl #2] @ r8 = d = dst[ch - 1] 469 ldr r8, [r3, r5, lsl #2] @ r8 = d = dst[ch - 1]
470 add r9, r4, #4 @ r9 = &last_sample[0] 470 add r9, r4, #4 @ r9 = &last_sample[0]
471 mov r1, r12, lsl #16 @ we'll use carry to detect pos increments 471 mov r1, r12, lsl #16 @ we'll use carry to detect pos increments
472 sub r11, r0, #1 472 sub r11, r0, #1
473 ldr r14, [r7, r11, lsl #2] @ load last sample in s[] ... 473 ldr r14, [r7, r11, lsl #2] @ load last sample in s[] ...
474 ldr r10, [r9, r5, lsl #2] @ r10 = last_sample[ch - 1] 474 ldr r10, [r9, r5, lsl #2] @ r10 = last_sample[ch - 1]
475 str r14, [r9, r5, lsl #2] @ and write as next frame's last_sample 475 str r14, [r9, r5, lsl #2] @ and write as next frame's last_sample
@@ -556,6 +556,6 @@ dsp_apply_gain:
556.dag_evencount: 556.dag_evencount:
557 subs r3, r3, #1 557 subs r3, r3, #1
558 bgt .dag_outerloop @ end of outer loop 558 bgt .dag_outerloop @ end of outer loop
559 559
560 ldmpc regs=r4-r8 560 ldmpc regs=r4-r8
561 .size dsp_apply_gain, .-dsp_apply_gain 561 .size dsp_apply_gain, .-dsp_apply_gain
diff --git a/lib/rbcodec/dsp/dsp_arm_v6.S b/lib/rbcodec/dsp/dsp_arm_v6.S
index 39949498ea..a9a88ce5bf 100644
--- a/lib/rbcodec/dsp/dsp_arm_v6.S
+++ b/lib/rbcodec/dsp/dsp_arm_v6.S
@@ -63,7 +63,7 @@ sample_output_mono:
63 ssat r12, #16, r12 @ 63 ssat r12, #16, r12 @
64 pkhbt r12, r12, r12, asl #16 @ 64 pkhbt r12, r12, r12, asl #16 @
65 str r12, [r3] @ store So 65 str r12, [r3] @ store So
66 @ 66 @
67 ldmfd sp!, { r4, pc } @ 67 ldmfd sp!, { r4, pc } @
68 .size sample_output_mono, .-sample_output_mono 68 .size sample_output_mono, .-sample_output_mono
69 69
@@ -79,7 +79,7 @@ sample_output_stereo:
79 @ input: r0 = count, r1 = data, r2 = src, r3 = dst 79 @ input: r0 = count, r1 = data, r2 = src, r3 = dst
80 stmfd sp!, { r4-r7, lr } @ 80 stmfd sp!, { r4-r7, lr } @
81 @ 81 @
82 ldr r1, [r1] @ r1 = data->output_scale 82 ldr r1, [r1] @ r1 = data->output_scale
83 ldmia r2, { r2, r4 } @ r2 = src[0], r4 = src[1] 83 ldmia r2, { r2, r4 } @ r2 = src[0], r4 = src[1]
84 @ 84 @
85 mov r5, #1 @ r5 = 1 << (scale - 1) 85 mov r5, #1 @ r5 = 1 << (scale - 1)
@@ -95,7 +95,7 @@ sample_output_stereo:
95 qadd r7, r7, r5 @ Li0+Ri0 to So0, Li1+Ri1 to So1 95 qadd r7, r7, r5 @ Li0+Ri0 to So0, Li1+Ri1 to So1
96 qadd r12, r12, r5 @ 96 qadd r12, r12, r5 @
97 qadd r14, r14, r5 @ 97 qadd r14, r14, r5 @
98 mov r6, r6, asr r1 @ 98 mov r6, r6, asr r1 @
99 mov r7, r7, asr r1 @ 99 mov r7, r7, asr r1 @
100 mov r12, r12, asr r1 @ 100 mov r12, r12, asr r1 @
101 mov r14, r14, asr r1 @ 101 mov r14, r14, asr r1 @
diff --git a/lib/rbcodec/dsp/dsp_cf.S b/lib/rbcodec/dsp/dsp_cf.S
index cda811a7d5..15ec7eb383 100644
--- a/lib/rbcodec/dsp/dsp_cf.S
+++ b/lib/rbcodec/dsp/dsp_cf.S
@@ -68,7 +68,7 @@ dsp_apply_gain:
68 */ 68 */
69 .section .text 69 .section .text
70 .align 2 70 .align 2
71 .global apply_crossfeed 71 .global apply_crossfeed
72apply_crossfeed: 72apply_crossfeed:
73 lea.l -44(%sp), %sp | 73 lea.l -44(%sp), %sp |
74 movem.l %d2-%d7/%a2-%a6, (%sp) | save all regs 74 movem.l %d2-%d7/%a2-%a6, (%sp) | save all regs
@@ -124,7 +124,7 @@ apply_crossfeed:
124 movem.l (%sp), %d2-%d7/%a2-%a6 | restore all regs 124 movem.l (%sp), %d2-%d7/%a2-%a6 | restore all regs
125 lea.l 44(%sp), %sp | 125 lea.l 44(%sp), %sp |
126 rts | 126 rts |
127 .size apply_crossfeed,.-apply_crossfeed 127 .size apply_crossfeed,.-apply_crossfeed
128 128
129/**************************************************************************** 129/****************************************************************************
130 * int dsp_downsample(int count, struct dsp_data *data, 130 * int dsp_downsample(int count, struct dsp_data *data,
@@ -422,7 +422,7 @@ sample_output_stereo:
422 movem.l %d1-%d7/%a2-%a6, (%sp) | be the far more common condition 422 movem.l %d1-%d7/%a2-%a6, (%sp) | be the far more common condition
423 move.l #0x80, %macsr | put emac unit in signed int mode 423 move.l #0x80, %macsr | put emac unit in signed int mode
424 movem.l 52(%sp), %a0-%a2/%a4 | 424 movem.l 52(%sp), %a0-%a2/%a4 |
425 lea.l (%a4, %a0.l*4), %a0 | %a0 = end address 425 lea.l (%a4, %a0.l*4), %a0 | %a0 = end address
426 move.l (%a1), %d1 | %a1 = multiplier: (1 << (16 - scale)) 426 move.l (%a1), %d1 | %a1 = multiplier: (1 << (16 - scale))
427 sub.l #16, %d1 | 427 sub.l #16, %d1 |
428 neg.l %d1 | 428 neg.l %d1 |
@@ -448,7 +448,7 @@ sample_output_stereo:
448 movclr.l %acc0, %d1 | get possibly saturated results 448 movclr.l %acc0, %d1 | get possibly saturated results
449 movclr.l %acc1, %d2 | 449 movclr.l %acc1, %d2 |
450 swap %d2 | move R to low word 450 swap %d2 | move R to low word
451 move.w %d2, %d1 | interleave MS 16 bits of each 451 move.w %d2, %d1 | interleave MS 16 bits of each
452 move.l %d1, (%a4)+ | ...and write both 452 move.l %d1, (%a4)+ | ...and write both
453 cmp.l %a4, %d0 | 453 cmp.l %a4, %d0 |
454 bhi.b 10b | long loop 0 | 454 bhi.b 10b | long loop 0 |
@@ -530,7 +530,7 @@ sample_output_mono:
530 movem.l %d1-%d5/%a2-%a4, (%sp) | be the far more common condition 530 movem.l %d1-%d5/%a2-%a4, (%sp) | be the far more common condition
531 move.l #0x80, %macsr | put emac unit in signed int mode 531 move.l #0x80, %macsr | put emac unit in signed int mode
532 movem.l 36(%sp), %a0-%a3 | 532 movem.l 36(%sp), %a0-%a3 |
533 lea.l (%a3, %a0.l*4), %a0 | %a0 = end address 533 lea.l (%a3, %a0.l*4), %a0 | %a0 = end address
534 move.l (%a1), %d1 | %d5 = multiplier: (1 << (16 - scale)) 534 move.l (%a1), %d1 | %d5 = multiplier: (1 << (16 - scale))
535 sub.l #16, %d1 | 535 sub.l #16, %d1 |
536 neg.l %d1 | 536 neg.l %d1 |