xref: /OK3568_Linux_fs/buildroot/package/speex/0001-thumb2-support.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunMake speex Thumb2 compatible
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunPatch written by Michael Hope from Linaro, available at
4*4882a593Smuzhiyunhttp://lists.xiph.org/pipermail/speex-dev/2010-November/008041.html.
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunSigned-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
7*4882a593Smuzhiyun[Bernd: rebased for 1.2.0]
8*4882a593SmuzhiyunSigned-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
9*4882a593Smuzhiyun
10*4882a593Smuzhiyundiff --git a/libspeex/filters_arm4.h b/libspeex/filters_arm4.h
11*4882a593Smuzhiyunindex 7a74042..6ec1f75 100644
12*4882a593Smuzhiyun--- a/libspeex/filters_arm4.h
13*4882a593Smuzhiyun+++ b/libspeex/filters_arm4.h
14*4882a593Smuzhiyun@@ -47,8 +47,10 @@ int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int le
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun          "\tldr %4, [%0], #4 \n"
17*4882a593Smuzhiyun          "\tcmp %4, %1 \n"
18*4882a593Smuzhiyun+         "\tit gt \n"
19*4882a593Smuzhiyun          "\tmovgt %1, %4 \n"
20*4882a593Smuzhiyun          "\tcmp %4, %3 \n"
21*4882a593Smuzhiyun+         "\tit lt \n"
22*4882a593Smuzhiyun          "\tmovlt %3, %4 \n"
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun          "\tsubs %2, %2, #1 \n"
25*4882a593Smuzhiyun@@ -56,6 +58,7 @@ int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int le
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun          "\trsb %3, %3, #0 \n"
28*4882a593Smuzhiyun          "\tcmp %1, %3 \n"
29*4882a593Smuzhiyun+         "\tit lt \n"
30*4882a593Smuzhiyun          "\tmovlt %1, %3 \n"
31*4882a593Smuzhiyun    : "=r" (dead1), "=r" (max_val), "=r" (dead3), "=r" (dead4),
32*4882a593Smuzhiyun    "=r" (dead5), "=r" (dead6)
33*4882a593Smuzhiyundiff --git a/libspeex/fixed_arm4.h b/libspeex/fixed_arm4.h
34*4882a593Smuzhiyunindex b6981ca..b6218ca 100644
35*4882a593Smuzhiyun--- a/libspeex/fixed_arm4.h
36*4882a593Smuzhiyun+++ b/libspeex/fixed_arm4.h
37*4882a593Smuzhiyun@@ -69,72 +69,90 @@ static inline short DIV32_16(int a, int b)
38*4882a593Smuzhiyun    __asm__ __volatile__ (
39*4882a593Smuzhiyun          "\teor %5, %0, %1\n"
40*4882a593Smuzhiyun          "\tmovs %4, %0\n"
41*4882a593Smuzhiyun+         "\tit mi \n"
42*4882a593Smuzhiyun          "\trsbmi %0, %0, #0 \n"
43*4882a593Smuzhiyun          "\tmovs %4, %1\n"
44*4882a593Smuzhiyun+         "\tit mi \n"
45*4882a593Smuzhiyun          "\trsbmi %1, %1, #0 \n"
46*4882a593Smuzhiyun          "\tmov %4, #1\n"
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #14 \n"
49*4882a593Smuzhiyun+         "\titt pl \n"
50*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
51*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #14 \n"
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #13 \n"
54*4882a593Smuzhiyun+         "\titt pl \n"
55*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
56*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #13 \n"
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #12 \n"
59*4882a593Smuzhiyun+         "\titt pl \n"
60*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
61*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #12 \n"
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #11 \n"
64*4882a593Smuzhiyun+         "\titt pl \n"
65*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
66*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #11 \n"
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #10 \n"
69*4882a593Smuzhiyun+         "\titt pl \n"
70*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
71*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #10 \n"
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #9 \n"
74*4882a593Smuzhiyun+         "\titt pl \n"
75*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
76*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #9 \n"
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #8 \n"
79*4882a593Smuzhiyun+         "\titt pl \n"
80*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
81*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #8 \n"
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #7 \n"
84*4882a593Smuzhiyun+         "\titt pl \n"
85*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
86*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #7 \n"
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #6 \n"
89*4882a593Smuzhiyun+         "\titt pl \n"
90*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
91*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #6 \n"
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #5 \n"
94*4882a593Smuzhiyun+         "\titt pl \n"
95*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
96*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #5 \n"
97*4882a593Smuzhiyun
98*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #4 \n"
99*4882a593Smuzhiyun+         "\titt pl \n"
100*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
101*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #4 \n"
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #3 \n"
104*4882a593Smuzhiyun+         "\titt pl \n"
105*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
106*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #3 \n"
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #2 \n"
109*4882a593Smuzhiyun+         "\titt pl \n"
110*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
111*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #2 \n"
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #1 \n"
114*4882a593Smuzhiyun+         "\titt pl \n"
115*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
116*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #1 \n"
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun          "\tsubs %3, %0, %1 \n"
119*4882a593Smuzhiyun+         "\titt pl \n"
120*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
121*4882a593Smuzhiyun          "\torrpl %2, %2, %4 \n"
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun          "\tmovs %5, %5, lsr #31 \n"
124*4882a593Smuzhiyun+         "\tit ne \n"
125*4882a593Smuzhiyun          "\trsbne %2, %2, #0 \n"
126*4882a593Smuzhiyun    : "=r" (dead1), "=r" (dead2), "=r" (res),
127*4882a593Smuzhiyun    "=r" (dead3), "=r" (dead4), "=r" (dead5)
128*4882a593Smuzhiyundiff --git a/libspeex/fixed_arm5e.h b/libspeex/fixed_arm5e.h
129*4882a593Smuzhiyunindex 9b4861c..bdadd02 100644
130*4882a593Smuzhiyun--- a/libspeex/fixed_arm5e.h
131*4882a593Smuzhiyun+++ b/libspeex/fixed_arm5e.h
132*4882a593Smuzhiyun@@ -97,72 +97,90 @@ static inline short DIV32_16(int a, int b)
133*4882a593Smuzhiyun    __asm__ __volatile__ (
134*4882a593Smuzhiyun          "\teor %5, %0, %1\n"
135*4882a593Smuzhiyun          "\tmovs %4, %0\n"
136*4882a593Smuzhiyun+         "\tit mi \n"
137*4882a593Smuzhiyun          "\trsbmi %0, %0, #0 \n"
138*4882a593Smuzhiyun          "\tmovs %4, %1\n"
139*4882a593Smuzhiyun+         "\tit mi \n"
140*4882a593Smuzhiyun          "\trsbmi %1, %1, #0 \n"
141*4882a593Smuzhiyun          "\tmov %4, #1\n"
142*4882a593Smuzhiyun
143*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #14 \n"
144*4882a593Smuzhiyun+         "\titt pl \n"
145*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #14 \n"
146*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #13 \n"
149*4882a593Smuzhiyun+         "\titt pl \n"
150*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #13 \n"
151*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #12 \n"
154*4882a593Smuzhiyun+         "\titt pl \n"
155*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #12 \n"
156*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
157*4882a593Smuzhiyun
158*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #11 \n"
159*4882a593Smuzhiyun+         "\titt pl \n"
160*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #11 \n"
161*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
162*4882a593Smuzhiyun
163*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #10 \n"
164*4882a593Smuzhiyun+         "\titt pl \n"
165*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #10 \n"
166*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #9 \n"
169*4882a593Smuzhiyun+         "\titt pl \n"
170*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #9 \n"
171*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #8 \n"
174*4882a593Smuzhiyun+         "\titt pl \n"
175*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #8 \n"
176*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
177*4882a593Smuzhiyun
178*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #7 \n"
179*4882a593Smuzhiyun+         "\titt pl \n"
180*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #7 \n"
181*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
182*4882a593Smuzhiyun
183*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #6 \n"
184*4882a593Smuzhiyun+         "\titt pl \n"
185*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #6 \n"
186*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #5 \n"
189*4882a593Smuzhiyun+         "\titt pl \n"
190*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #5 \n"
191*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
192*4882a593Smuzhiyun
193*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #4 \n"
194*4882a593Smuzhiyun+         "\titt pl \n"
195*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #4 \n"
196*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
197*4882a593Smuzhiyun
198*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #3 \n"
199*4882a593Smuzhiyun+         "\titt pl \n"
200*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #3 \n"
201*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
202*4882a593Smuzhiyun
203*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #2 \n"
204*4882a593Smuzhiyun+         "\titt pl \n"
205*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #2 \n"
206*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
207*4882a593Smuzhiyun
208*4882a593Smuzhiyun          "\tsubs %3, %0, %1, asl #1 \n"
209*4882a593Smuzhiyun+         "\titt pl \n"
210*4882a593Smuzhiyun          "\torrpl %2, %2, %4, asl #1 \n"
211*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
212*4882a593Smuzhiyun
213*4882a593Smuzhiyun          "\tsubs %3, %0, %1 \n"
214*4882a593Smuzhiyun+         "\titt pl \n"
215*4882a593Smuzhiyun          "\torrpl %2, %2, %4 \n"
216*4882a593Smuzhiyun          "\tmovpl %0, %3 \n"
217*4882a593Smuzhiyun
218*4882a593Smuzhiyun          "\tmovs %5, %5, lsr #31 \n"
219*4882a593Smuzhiyun+         "\tit ne \n"
220*4882a593Smuzhiyun          "\trsbne %2, %2, #0 \n"
221*4882a593Smuzhiyun    : "=r" (dead1), "=r" (dead2), "=r" (res),
222*4882a593Smuzhiyun    "=r" (dead3), "=r" (dead4), "=r" (dead5)
223