summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThom Johansen <thomj@rockbox.org>2005-10-27 11:00:24 +0000
committerThom Johansen <thomj@rockbox.org>2005-10-27 11:00:24 +0000
commitc2628f3af96f4a2a539d3f179988251a8b6301db (patch)
tree1ed2773f4bf77873041df7db5e90832ee41eaae5
parent0b38c7dcbe283ba7d13531831a5367afae668e69 (diff)
downloadrockbox-c2628f3af96f4a2a539d3f179988251a8b6301db.tar.gz
rockbox-c2628f3af96f4a2a539d3f179988251a8b6301db.zip
Replaced jump table with a more efficient one.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7658 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codecs/libffmpegFLAC/coldfire.S25
1 files changed, 11 insertions, 14 deletions
diff --git a/apps/codecs/libffmpegFLAC/coldfire.S b/apps/codecs/libffmpegFLAC/coldfire.S
index 7e19e4b695..720e6edd86 100644
--- a/apps/codecs/libffmpegFLAC/coldfire.S
+++ b/apps/codecs/libffmpegFLAC/coldfire.S
@@ -48,21 +48,18 @@ lpc_decode_emac:
48 moveq.l #8, %d3 48 moveq.l #8, %d3
49 cmp.l %d3, %d2 49 cmp.l %d3, %d2
50 jgt .default | order is over 8, jump to default case 50 jgt .default | order is over 8, jump to default case
51 lea.l .jumptable, %a4 51 jmp.l (2, %pc, %d2.l*4) | jump to loop corresponding to pred_order
52 move.l (%a4, %d2.l*4), %a4
53 jmp (%a4)
54 .align 4 | avoid unaligned fetch
55.jumptable: 52.jumptable:
56 .long .exit 53 bra.w .exit | zero order filter isn't possible, exit function
57 .long .order1 54 bra.w .order1
58 .long .order2 55 bra.w .order2
59 .long .order3 56 bra.w .order3
60 .long .order4 57 bra.w .order4
61 .long .order5 58 bra.w .order5
62 .long .order6 59 bra.w .order6
63 .long .order7 60 bra.w .order7
64 .long .order8
65 61
62| last jump table entry coincides with target, so leave it out
66.order8: 63.order8:
67 movem.l (%a1), %d3-%d7/%a2-%a4 | load lpc coefs 64 movem.l (%a1), %d3-%d7/%a2-%a4 | load lpc coefs
68 move.l (%a0)+, %a5 | load first history sample 65 move.l (%a0)+, %a5 | load first history sample
@@ -78,7 +75,7 @@ lpc_decode_emac:
78 movclr.l %acc0, %d2 | get sum 75 movclr.l %acc0, %d2 | get sum
79 asr.l %d1, %d2 | shift sum by lp_quantization bits 76 asr.l %d1, %d2 | shift sum by lp_quantization bits
80 add.l %d2, (%a0) | add residual and save 77 add.l %d2, (%a0) | add residual and save
81 lea.l (-6*4, %a0), %a0 | history pointer points at second element 78 lea.l (-6*4, %a0), %a0 | point history back at second element
82 subq.l #1, %d0 | decrement counter 79 subq.l #1, %d0 | decrement counter
83 jne .loop8 | are we done? 80 jne .loop8 | are we done?
84 jra .exit 81 jra .exit