diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/codecs/libtta/filter_arm.S | 69 |
1 files changed, 32 insertions, 37 deletions
diff --git a/apps/codecs/libtta/filter_arm.S b/apps/codecs/libtta/filter_arm.S index 37c515d3a9..d34b182a04 100644 --- a/apps/codecs/libtta/filter_arm.S +++ b/apps/codecs/libtta/filter_arm.S | |||
@@ -47,17 +47,17 @@ hybrid_filter: | |||
47 | @ r6 fs->error | 47 | @ r6 fs->error |
48 | @ lr sum := fs->round | 48 | @ lr sum := fs->round |
49 | 49 | ||
50 | add r2, r0, #148 @ r2 = fs->dl | ||
51 | add r3, r0, #52 @ r3 = fs->dx | ||
52 | add r4, r0, #20 @ r4 = fs->qm | ||
53 | ldmia r0, {r5, r6, lr} @ r5 = fs->index | 50 | ldmia r0, {r5, r6, lr} @ r5 = fs->index |
54 | @ r6 = fs->error | 51 | @ r6 = fs->error |
55 | @ lr = fs->round | 52 | @ lr = fs->round |
56 | mov r5, r5, asl #2 | 53 | add r2, r0, #148 @ r2 = fs->dl |
57 | add r2, r2, r5 @ r2 = fs->dl + fs->index | 54 | add r3, r0, #52 @ r3 = fs->dx |
58 | add r3, r3, r5 @ r3 = fs->dx + fs->index | 55 | add r4, r0, #20 @ r4 = fs->qm |
56 | add r2, r2, r5 @ r2 = (unsigned char*)fs->dl + fs->index | ||
57 | add r3, r3, r5 @ r3 = (unsigned char*)fs->dx + fs->index | ||
59 | 58 | ||
60 | cmp r6, #0 | 59 | cmp r6, #0 |
60 | bmi .hf_negative | ||
61 | bne .hf_positive | 61 | bne .hf_positive |
62 | 62 | ||
63 | @ case fs->error == 0 | 63 | @ case fs->error == 0 |
@@ -72,17 +72,15 @@ hybrid_filter: | |||
72 | ldmia r4!, {r5, r6, r7, r8 } | 72 | ldmia r4!, {r5, r6, r7, r8 } |
73 | b .hf2 | 73 | b .hf2 |
74 | 74 | ||
75 | .hf_positive: | 75 | .hf_negative: |
76 | blt .hf_negative | 76 | @ case fs->error < 0 |
77 | |||
78 | @ case fs->error > 0 | ||
79 | 77 | ||
80 | ldmia r4, {r5, r6, r7, r8 } | 78 | ldmia r4, {r5, r6, r7, r8 } |
81 | ldmia r3!, {r9, r10, r11, r12} | 79 | ldmia r3!, {r9, r10, r11, r12} |
82 | add r5, r5, r9 | 80 | sub r5, r5, r9 |
83 | add r6, r6, r10 | 81 | sub r6, r6, r10 |
84 | add r7, r7, r11 | 82 | sub r7, r7, r11 |
85 | add r8, r8, r12 | 83 | sub r8, r8, r12 |
86 | stmia r4!, {r5, r6, r7, r8 } @ update fs->qm[0], ..., fs->qm[3] | 84 | stmia r4!, {r5, r6, r7, r8 } @ update fs->qm[0], ..., fs->qm[3] |
87 | ldmia r2!, {r9, r10, r11, r12} | 85 | ldmia r2!, {r9, r10, r11, r12} |
88 | mla lr, r5, r9, lr | 86 | mla lr, r5, r9, lr |
@@ -91,22 +89,22 @@ hybrid_filter: | |||
91 | mla lr, r8, r12, lr | 89 | mla lr, r8, r12, lr |
92 | ldmia r4, {r5, r6, r7, r8 } | 90 | ldmia r4, {r5, r6, r7, r8 } |
93 | ldmia r3!, {r9, r10, r11, r12} | 91 | ldmia r3!, {r9, r10, r11, r12} |
94 | add r5, r5, r9 | 92 | sub r5, r5, r9 |
95 | add r6, r6, r10 | 93 | sub r6, r6, r10 |
96 | add r7, r7, r11 | 94 | sub r7, r7, r11 |
97 | add r8, r8, r12 | 95 | sub r8, r8, r12 |
98 | stmia r4!, {r5, r6, r7, r8 } @ update fs->qm[4], ..., fs->qm[7] | 96 | stmia r4!, {r5, r6, r7, r8 } @ update fs->qm[4], ..., fs->qm[7] |
99 | b .hf2 | 97 | b .hf2 |
100 | 98 | ||
101 | .hf_negative: | 99 | .hf_positive: |
102 | @ case fs->error < 0 | 100 | @ case fs->error > 0 |
103 | 101 | ||
104 | ldmia r4, {r5, r6, r7, r8 } | 102 | ldmia r4, {r5, r6, r7, r8 } |
105 | ldmia r3!, {r9, r10, r11, r12} | 103 | ldmia r3!, {r9, r10, r11, r12} |
106 | sub r5, r5, r9 | 104 | add r5, r5, r9 |
107 | sub r6, r6, r10 | 105 | add r6, r6, r10 |
108 | sub r7, r7, r11 | 106 | add r7, r7, r11 |
109 | sub r8, r8, r12 | 107 | add r8, r8, r12 |
110 | stmia r4!, {r5, r6, r7, r8 } @ update fs->qm[0], ..., fs->qm[3] | 108 | stmia r4!, {r5, r6, r7, r8 } @ update fs->qm[0], ..., fs->qm[3] |
111 | ldmia r2!, {r9, r10, r11, r12} | 109 | ldmia r2!, {r9, r10, r11, r12} |
112 | mla lr, r5, r9, lr | 110 | mla lr, r5, r9, lr |
@@ -115,10 +113,10 @@ hybrid_filter: | |||
115 | mla lr, r8, r12, lr | 113 | mla lr, r8, r12, lr |
116 | ldmia r4, {r5, r6, r7, r8 } | 114 | ldmia r4, {r5, r6, r7, r8 } |
117 | ldmia r3!, {r9, r10, r11, r12} | 115 | ldmia r3!, {r9, r10, r11, r12} |
118 | sub r5, r5, r9 | 116 | add r5, r5, r9 |
119 | sub r6, r6, r10 | 117 | add r6, r6, r10 |
120 | sub r7, r7, r11 | 118 | add r7, r7, r11 |
121 | sub r8, r8, r12 | 119 | add r8, r8, r12 |
122 | stmia r4!, {r5, r6, r7, r8 } @ update fs->qm[4], ..., fs->qm[7] | 120 | stmia r4!, {r5, r6, r7, r8 } @ update fs->qm[4], ..., fs->qm[7] |
123 | 121 | ||
124 | .hf2: | 122 | .hf2: |
@@ -140,9 +138,9 @@ hybrid_filter: | |||
140 | @ update fs->index | 138 | @ update fs->index |
141 | 139 | ||
142 | ldr r1, [r0] @ r1 = fs->index | 140 | ldr r1, [r0] @ r1 = fs->index |
143 | add r1, r1, #1 | 141 | add r1, r1, #4 |
144 | ands r1, r1, #15 @ set Z flag (after this, CPSR must keep !!) | 142 | ands r1, r1, #63 @ set Z flag (after this, CPSR must keep !!) |
145 | stmia r0, {r1, r5} @ fs->index = (++fs->index & 15) | 143 | stmia r0, {r1, r5} @ fs->index = (fs->index + 4) & 63 |
146 | @ fs->error = (original) *in | 144 | @ fs->error = (original) *in |
147 | 145 | ||
148 | @ change *pM, *(pM-1), *(pM-2), *(pM-3) | 146 | @ change *pM, *(pM-1), *(pM-2), *(pM-3) |
@@ -166,13 +164,10 @@ hybrid_filter: | |||
166 | sub r11, r12, r11 | 164 | sub r11, r12, r11 |
167 | sub r10, r11, r10 | 165 | sub r10, r11, r10 |
168 | 166 | ||
169 | @ check fs->index is zero | ||
170 | beq .hf_memshl | ||
171 | |||
172 | @ set to the memory: *pA, *(pA-1), *(pA-2), *(pA-3), *pM, *(pM-1), *(pM-2), *(pM-3) | 167 | @ set to the memory: *pA, *(pA-1), *(pA-2), *(pA-3), *pM, *(pM-1), *(pM-2), *(pM-3) |
173 | stmda r2, {r10, r11, r12, lr} | 168 | stmneda r2, {r10, r11, r12, lr} |
174 | stmda r3, {r5, r6, r7, r8} | 169 | stmneda r3, {r5, r6, r7, r8} |
175 | ldmfd sp!, {r4-r12, pc} @ hybrid_filter end (when fs->index != 0) | 170 | ldmnefd sp!, {r4-r12, pc} @ hybrid_filter end (when fs->index != 0) |
176 | 171 | ||
177 | .hf_memshl: | 172 | .hf_memshl: |
178 | @ memshl (fs->dl) | 173 | @ memshl (fs->dl) |