summaryrefslogtreecommitdiff
path: root/apps/codecs
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs')
-rw-r--r--apps/codecs/libatrac/atrac3_arm.S452
-rw-r--r--apps/codecs/libspeex/lsp.h128
2 files changed, 290 insertions, 290 deletions
diff --git a/apps/codecs/libatrac/atrac3_arm.S b/apps/codecs/libatrac/atrac3_arm.S
index 80eaa7954d..0dacff0b7c 100644
--- a/apps/codecs/libatrac/atrac3_arm.S
+++ b/apps/codecs/libatrac/atrac3_arm.S
@@ -1,226 +1,226 @@
1/*************************************************************************** 1/***************************************************************************
2 * __________ __ ___. 2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/ 7 * \/ \/ \/ \/ \/
8 * $Id: 8 * $Id:
9 * 9 *
10 * Copyright (C) 2009 by Andree Buschmann 10 * Copyright (C) 2009 by Andree Buschmann
11 * 11 *
12 * This program is free software; you can redistribute it and/or 12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License 13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2 14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version. 15 * of the License, or (at your option) any later version.
16 * 16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied. 18 * KIND, either express or implied.
19 * 19 *
20 ****************************************************************************/ 20 ****************************************************************************/
21 21
22#include "config.h" 22#include "config.h"
23 23
24 .section .text, "ax", %progbits 24 .section .text, "ax", %progbits
25 25
26/**************************************************************************** 26/****************************************************************************
27 * void atrac3_iqmf_matrixing(int32_t *dest, 27 * void atrac3_iqmf_matrixing(int32_t *dest,
28 * int32_t *inlo, 28 * int32_t *inlo,
29 * int32_t *inhi, 29 * int32_t *inhi,
30 * unsigned int count); 30 * unsigned int count);
31 * 31 *
32 * Matrixing step within iqmf of atrac3 synthesis. Reference implementation: 32 * Matrixing step within iqmf of atrac3 synthesis. Reference implementation:
33 * 33 *
34 * for(i=0; i<counter; i+=2){ 34 * for(i=0; i<counter; i+=2){
35 * dest[2*i+0] = inlo[i ] + inhi[i ]; 35 * dest[2*i+0] = inlo[i ] + inhi[i ];
36 * dest[2*i+1] = inlo[i ] - inhi[i ]; 36 * dest[2*i+1] = inlo[i ] - inhi[i ];
37 * dest[2*i+2] = inlo[i+1] + inhi[i+1]; 37 * dest[2*i+2] = inlo[i+1] + inhi[i+1];
38 * dest[2*i+3] = inlo[i+1] - inhi[i+1]; 38 * dest[2*i+3] = inlo[i+1] - inhi[i+1];
39 * } 39 * }
40 * Note: r12 is a scratch register and can be used without restorage. 40 * Note: r12 is a scratch register and can be used without restorage.
41 ****************************************************************************/ 41 ****************************************************************************/
42 .align 2 42 .align 2
43 .global atrac3_iqmf_matrixing 43 .global atrac3_iqmf_matrixing
44 .type atrac3_iqmf_matrixing, %function 44 .type atrac3_iqmf_matrixing, %function
45 45
46atrac3_iqmf_matrixing: 46atrac3_iqmf_matrixing:
47 /* r0 = dest */ 47 /* r0 = dest */
48 /* r1 = inlo */ 48 /* r1 = inlo */
49 /* r2 = inhi */ 49 /* r2 = inhi */
50 /* r3 = counter */ 50 /* r3 = counter */
51 stmfd sp!, {r4-r9, lr} /* save non-scratch registers */ 51 stmfd sp!, {r4-r9, lr} /* save non-scratch registers */
52 52
53.iqmf_matrixing_loop: 53.iqmf_matrixing_loop:
54 ldmia r1!, { r4, r6, r8, r12} /* load inlo[0...3] */ 54 ldmia r1!, { r4, r6, r8, r12} /* load inlo[0...3] */
55 ldmia r2!, { r5, r7, r9, lr } /* load inhi[0...3] */ 55 ldmia r2!, { r5, r7, r9, lr } /* load inhi[0...3] */
56 add r4, r4, r5 /* r4 = inlo[0] + inhi[0] */ 56 add r4, r4, r5 /* r4 = inlo[0] + inhi[0] */
57 sub r5, r4, r5, asl #1 /* r5 = inlo[0] - inhi[0] */ 57 sub r5, r4, r5, asl #1 /* r5 = inlo[0] - inhi[0] */
58 add r6, r6, r7 /* r6 = inlo[1] + inhi[1] */ 58 add r6, r6, r7 /* r6 = inlo[1] + inhi[1] */
59 sub r7, r6, r7, asl #1 /* r7 = inlo[1] - inhi[1] */ 59 sub r7, r6, r7, asl #1 /* r7 = inlo[1] - inhi[1] */
60 add r8, r8, r9 /* r8 = inlo[2] + inhi[2] */ 60 add r8, r8, r9 /* r8 = inlo[2] + inhi[2] */
61 sub r9, r8, r9, asl #1 /* r9 = inlo[2] - inhi[2] */ 61 sub r9, r8, r9, asl #1 /* r9 = inlo[2] - inhi[2] */
62 add r12, r12, lr /* r12 = inlo[3] + inhi[3] */ 62 add r12, r12, lr /* r12 = inlo[3] + inhi[3] */
63 sub lr , r12, lr, asl #1 /* lr = inlo[3] - inhi[3] */ 63 sub lr , r12, lr, asl #1 /* lr = inlo[3] - inhi[3] */
64 stmia r0!, {r4-r9, r12, lr} /* store results to dest */ 64 stmia r0!, {r4-r9, r12, lr} /* store results to dest */
65 subs r3, r3, #4 /* counter -= 4 */ 65 subs r3, r3, #4 /* counter -= 4 */
66 bgt .iqmf_matrixing_loop 66 bgt .iqmf_matrixing_loop
67 67
68 ldmpc regs=r4-r9 /* restore registers */ 68 ldmpc regs=r4-r9 /* restore registers */
69 69
70.atrac3_iqmf_matrixing_end: 70.atrac3_iqmf_matrixing_end:
71 .size atrac3_iqmf_matrixing,.atrac3_iqmf_matrixing_end-atrac3_iqmf_matrixing 71 .size atrac3_iqmf_matrixing,.atrac3_iqmf_matrixing_end-atrac3_iqmf_matrixing
72 72
73 73
74/**************************************************************************** 74/****************************************************************************
75 * atrac3_iqmf_dewindowing(int32_t *out, 75 * atrac3_iqmf_dewindowing(int32_t *out,
76 * int32_t *in, 76 * int32_t *in,
77 * int32_t *win, 77 * int32_t *win,
78 * unsigned int nIn); 78 * unsigned int nIn);
79 * 79 *
80 * Dewindowing step within iqmf of atrac3 synthesis. Reference implementation: 80 * Dewindowing step within iqmf of atrac3 synthesis. Reference implementation:
81 * 81 *
82 * for (j = nIn; j != 0; j--) { 82 * for (j = nIn; j != 0; j--) {
83 * s1 = fixmul32(in[0], win[0]); 83 * s1 = fixmul32(in[0], win[0]);
84 * s2 = fixmul32(in[1], win[1]); 84 * s2 = fixmul32(in[1], win[1]);
85 * for (i = 2; i < 48; i += 2) { 85 * for (i = 2; i < 48; i += 2) {
86 * s1 += fixmul32(in[i ], win[i ]); 86 * s1 += fixmul32(in[i ], win[i ]);
87 * s2 += fixmul32(in[i+1], win[i+1]); 87 * s2 += fixmul32(in[i+1], win[i+1]);
88 * } 88 * }
89 * out[0] = s2 << 1; 89 * out[0] = s2 << 1;
90 * out[1] = s1 << 1; 90 * out[1] = s1 << 1;
91 * in += 2; 91 * in += 2;
92 * out += 2; 92 * out += 2;
93 * } 93 * }
94 * Note: r12 is a scratch register and can be used without restorage. 94 * Note: r12 is a scratch register and can be used without restorage.
95 ****************************************************************************/ 95 ****************************************************************************/
96 .align 2 96 .align 2
97 .global atrac3_iqmf_dewindowing 97 .global atrac3_iqmf_dewindowing
98 .type atrac3_iqmf_dewindowing, %function 98 .type atrac3_iqmf_dewindowing, %function
99 99
100atrac3_iqmf_dewindowing: 100atrac3_iqmf_dewindowing:
101 /* r0 = dest */ 101 /* r0 = dest */
102 /* r1 = input samples */ 102 /* r1 = input samples */
103 /* r2 = window coefficients */ 103 /* r2 = window coefficients */
104 /* r3 = counter */ 104 /* r3 = counter */
105 stmfd sp!, {r4-r9, lr} /* save non-scratch registers */ 105 stmfd sp!, {r4-r9, lr} /* save non-scratch registers */
106 106
107.iqmf_dewindow_outer_loop: /* outer loop 0...counter-1 */ 107.iqmf_dewindow_outer_loop: /* outer loop 0...counter-1 */
108 /* 0.. 7 */ 108 /* 0.. 7 */
109 ldmia r2!, {r4, r5} /* load win[0..1] */ 109 ldmia r2!, {r4, r5} /* load win[0..1] */
110 ldmia r1!, {r6, r7} /* load in[0..1] */ 110 ldmia r1!, {r6, r7} /* load in[0..1] */
111 smull lr , r9, r4, r6 /* s1 = win[0] * in[0] */ 111 smull lr , r9, r4, r6 /* s1 = win[0] * in[0] */
112 smull r12, r8, r5, r7 /* s2 = win[1] * in[1] */ 112 smull r12, r8, r5, r7 /* s2 = win[1] * in[1] */
113 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 113 ldmia r2!, {r4, r5} /* load win[i...i+1] */
114 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 114 ldmia r1!, {r6, r7} /* load in[i...i+1] */
115 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 115 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
116 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 116 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
117 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 117 ldmia r2!, {r4, r5} /* load win[i...i+1] */
118 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 118 ldmia r1!, {r6, r7} /* load in[i...i+1] */
119 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 119 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
120 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 120 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
121 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 121 ldmia r2!, {r4, r5} /* load win[i...i+1] */
122 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 122 ldmia r1!, {r6, r7} /* load in[i...i+1] */
123 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 123 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
124 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 124 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
125 /* 8..15 */ 125 /* 8..15 */
126 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 126 ldmia r2!, {r4, r5} /* load win[i...i+1] */
127 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 127 ldmia r1!, {r6, r7} /* load in[i...i+1] */
128 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 128 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
129 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 129 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
130 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 130 ldmia r2!, {r4, r5} /* load win[i...i+1] */
131 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 131 ldmia r1!, {r6, r7} /* load in[i...i+1] */
132 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 132 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
133 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 133 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
134 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 134 ldmia r2!, {r4, r5} /* load win[i...i+1] */
135 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 135 ldmia r1!, {r6, r7} /* load in[i...i+1] */
136 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 136 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
137 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 137 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
138 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 138 ldmia r2!, {r4, r5} /* load win[i...i+1] */
139 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 139 ldmia r1!, {r6, r7} /* load in[i...i+1] */
140 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 140 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
141 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 141 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
142 /* 16..23 */ 142 /* 16..23 */
143 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 143 ldmia r2!, {r4, r5} /* load win[i...i+1] */
144 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 144 ldmia r1!, {r6, r7} /* load in[i...i+1] */
145 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 145 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
146 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 146 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
147 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 147 ldmia r2!, {r4, r5} /* load win[i...i+1] */
148 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 148 ldmia r1!, {r6, r7} /* load in[i...i+1] */
149 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 149 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
150 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 150 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
151 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 151 ldmia r2!, {r4, r5} /* load win[i...i+1] */
152 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 152 ldmia r1!, {r6, r7} /* load in[i...i+1] */
153 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 153 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
154 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 154 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
155 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 155 ldmia r2!, {r4, r5} /* load win[i...i+1] */
156 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 156 ldmia r1!, {r6, r7} /* load in[i...i+1] */
157 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 157 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
158 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 158 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
159 /* 24..31 */ 159 /* 24..31 */
160 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 160 ldmia r2!, {r4, r5} /* load win[i...i+1] */
161 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 161 ldmia r1!, {r6, r7} /* load in[i...i+1] */
162 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 162 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
163 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 163 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
164 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 164 ldmia r2!, {r4, r5} /* load win[i...i+1] */
165 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 165 ldmia r1!, {r6, r7} /* load in[i...i+1] */
166 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 166 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
167 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 167 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
168 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 168 ldmia r2!, {r4, r5} /* load win[i...i+1] */
169 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 169 ldmia r1!, {r6, r7} /* load in[i...i+1] */
170 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 170 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
171 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 171 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
172 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 172 ldmia r2!, {r4, r5} /* load win[i...i+1] */
173 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 173 ldmia r1!, {r6, r7} /* load in[i...i+1] */
174 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 174 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
175 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 175 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
176 /* 32..39 */ 176 /* 32..39 */
177 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 177 ldmia r2!, {r4, r5} /* load win[i...i+1] */
178 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 178 ldmia r1!, {r6, r7} /* load in[i...i+1] */
179 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 179 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
180 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 180 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
181 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 181 ldmia r2!, {r4, r5} /* load win[i...i+1] */
182 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 182 ldmia r1!, {r6, r7} /* load in[i...i+1] */
183 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 183 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
184 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 184 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
185 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 185 ldmia r2!, {r4, r5} /* load win[i...i+1] */
186 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 186 ldmia r1!, {r6, r7} /* load in[i...i+1] */
187 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 187 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
188 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 188 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
189 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 189 ldmia r2!, {r4, r5} /* load win[i...i+1] */
190 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 190 ldmia r1!, {r6, r7} /* load in[i...i+1] */
191 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 191 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
192 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 192 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
193 /* 40..47 */ 193 /* 40..47 */
194 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 194 ldmia r2!, {r4, r5} /* load win[i...i+1] */
195 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 195 ldmia r1!, {r6, r7} /* load in[i...i+1] */
196 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 196 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
197 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 197 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
198 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 198 ldmia r2!, {r4, r5} /* load win[i...i+1] */
199 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 199 ldmia r1!, {r6, r7} /* load in[i...i+1] */
200 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 200 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
201 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 201 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
202 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 202 ldmia r2!, {r4, r5} /* load win[i...i+1] */
203 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 203 ldmia r1!, {r6, r7} /* load in[i...i+1] */
204 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 204 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
205 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 205 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
206 ldmia r2!, {r4, r5} /* load win[i...i+1] */ 206 ldmia r2!, {r4, r5} /* load win[i...i+1] */
207 ldmia r1!, {r6, r7} /* load in[i...i+1] */ 207 ldmia r1!, {r6, r7} /* load in[i...i+1] */
208 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */ 208 smlal lr , r9, r4, r6 /* s1 = win[i ] * in[i ] */
209 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */ 209 smlal r12, r8, r5, r7 /* s2 = win[i+1] * in[i+1] */
210 210
211 mov lr , lr , lsr #31 211 mov lr , lr , lsr #31
212 orr r9, lr , r9, lsl #1 /* s1 = low>>31 || hi<<1 */ 212 orr r9, lr , r9, lsl #1 /* s1 = low>>31 || hi<<1 */
213 mov r12, r12, lsr #31 213 mov r12, r12, lsr #31
214 orr r8, r12, r8, lsl #1 /* s2 = low>>31 || hi<<1 */ 214 orr r8, r12, r8, lsl #1 /* s2 = low>>31 || hi<<1 */
215 215
216 stmia r0!, {r8, r9} /* store result out[0]=s2, out[1]=s1 */ 216 stmia r0!, {r8, r9} /* store result out[0]=s2, out[1]=s1 */
217 sub r1, r1, #184 /* roll back 64 entries = 184 bytes */ 217 sub r1, r1, #184 /* roll back 64 entries = 184 bytes */
218 sub r2, r2, #192 /* roll back 48 entries = 192 bytes = win[0] */ 218 sub r2, r2, #192 /* roll back 48 entries = 192 bytes = win[0] */
219 219
220 subs r3, r3, #1 /* outer loop -= 1 */ 220 subs r3, r3, #1 /* outer loop -= 1 */
221 bgt .iqmf_dewindow_outer_loop 221 bgt .iqmf_dewindow_outer_loop
222 222
223 ldmpc regs=r4-r9 /* restore registers */ 223 ldmpc regs=r4-r9 /* restore registers */
224 224
225.atrac3_iqmf_dewindowing_end: 225.atrac3_iqmf_dewindowing_end:
226 .size atrac3_iqmf_dewindowing,.atrac3_iqmf_dewindowing_end-atrac3_iqmf_dewindowing 226 .size atrac3_iqmf_dewindowing,.atrac3_iqmf_dewindowing_end-atrac3_iqmf_dewindowing
diff --git a/apps/codecs/libspeex/lsp.h b/apps/codecs/libspeex/lsp.h
index 2841e4b747..c53e7769d3 100644
--- a/apps/codecs/libspeex/lsp.h
+++ b/apps/codecs/libspeex/lsp.h
@@ -1,64 +1,64 @@
1/*---------------------------------------------------------------------------*\ 1/*---------------------------------------------------------------------------*\
2Original Copyright 2Original Copyright
3 FILE........: AK2LSPD.H 3 FILE........: AK2LSPD.H
4 TYPE........: Turbo C header file 4 TYPE........: Turbo C header file
5 COMPANY.....: Voicetronix 5 COMPANY.....: Voicetronix
6 AUTHOR......: James Whitehall 6 AUTHOR......: James Whitehall
7 DATE CREATED: 21/11/95 7 DATE CREATED: 21/11/95
8 8
9Modified by Jean-Marc Valin 9Modified by Jean-Marc Valin
10 10
11 This file contains functions for converting Linear Prediction 11 This file contains functions for converting Linear Prediction
12 Coefficients (LPC) to Line Spectral Pair (LSP) and back. Note that the 12 Coefficients (LPC) to Line Spectral Pair (LSP) and back. Note that the
13 LSP coefficients are not in radians format but in the x domain of the 13 LSP coefficients are not in radians format but in the x domain of the
14 unit circle. 14 unit circle.
15 15
16\*---------------------------------------------------------------------------*/ 16\*---------------------------------------------------------------------------*/
17/** 17/**
18 @file lsp.h 18 @file lsp.h
19 @brief Line Spectral Pair (LSP) functions. 19 @brief Line Spectral Pair (LSP) functions.
20*/ 20*/
21/* Speex License: 21/* Speex License:
22 22
23 Redistribution and use in source and binary forms, with or without 23 Redistribution and use in source and binary forms, with or without
24 modification, are permitted provided that the following conditions 24 modification, are permitted provided that the following conditions
25 are met: 25 are met:
26 26
27 - Redistributions of source code must retain the above copyright 27 - Redistributions of source code must retain the above copyright
28 notice, this list of conditions and the following disclaimer. 28 notice, this list of conditions and the following disclaimer.
29 29
30 - Redistributions in binary form must reproduce the above copyright 30 - Redistributions in binary form must reproduce the above copyright
31 notice, this list of conditions and the following disclaimer in the 31 notice, this list of conditions and the following disclaimer in the
32 documentation and/or other materials provided with the distribution. 32 documentation and/or other materials provided with the distribution.
33 33
34 - Neither the name of the Xiph.org Foundation nor the names of its 34 - Neither the name of the Xiph.org Foundation nor the names of its
35 contributors may be used to endorse or promote products derived from 35 contributors may be used to endorse or promote products derived from
36 this software without specific prior written permission. 36 this software without specific prior written permission.
37 37
38 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 38 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
39 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 39 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
40 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 40 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
41 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR 41 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
42 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 42 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
43 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 43 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
44 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 44 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
45 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 45 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
46 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 46 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
47 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 47 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
48 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 48 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
49*/ 49*/
50 50
51#ifndef __AK2LSPD__ 51#ifndef __AK2LSPD__
52#define __AK2LSPD__ 52#define __AK2LSPD__
53 53
54#include "arch.h" 54#include "arch.h"
55 55
56int lpc_to_lsp (spx_coef_t *a, int lpcrdr, spx_lsp_t *freq, int nb, spx_word16_t delta, char *stack); 56int lpc_to_lsp (spx_coef_t *a, int lpcrdr, spx_lsp_t *freq, int nb, spx_word16_t delta, char *stack);
57void lsp_to_lpc(spx_lsp_t *freq, spx_coef_t *ak, int lpcrdr, char *stack); 57void lsp_to_lpc(spx_lsp_t *freq, spx_coef_t *ak, int lpcrdr, char *stack);
58 58
59/*Added by JMV*/ 59/*Added by JMV*/
60void lsp_enforce_margin(spx_lsp_t *lsp, int len, spx_word16_t margin); 60void lsp_enforce_margin(spx_lsp_t *lsp, int len, spx_word16_t margin);
61 61
62void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *interp_lsp, int len, int subframe, int nb_subframes); 62void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *interp_lsp, int len, int subframe, int nb_subframes);
63 63
64#endif /* __AK2LSPD__ */ 64#endif /* __AK2LSPD__ */