| rev |
line source |
|
nengel@2
|
1 /*
|
|
nengel@2
|
2 * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
|
|
nengel@2
|
3 *
|
|
nengel@2
|
4 * This file is part of FFmpeg.
|
|
nengel@2
|
5 *
|
|
nengel@2
|
6 * FFmpeg is free software; you can redistribute it and/or
|
|
nengel@2
|
7 * modify it under the terms of the GNU Lesser General Public
|
|
nengel@2
|
8 * License as published by the Free Software Foundation; either
|
|
nengel@2
|
9 * version 2.1 of the License, or (at your option) any later version.
|
|
nengel@2
|
10 *
|
|
nengel@2
|
11 * FFmpeg is distributed in the hope that it will be useful,
|
|
nengel@2
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
nengel@2
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
nengel@2
|
14 * Lesser General Public License for more details.
|
|
nengel@2
|
15 *
|
|
nengel@2
|
16 * You should have received a copy of the GNU Lesser General Public
|
|
nengel@2
|
17 * License along with FFmpeg; if not, write to the Free Software
|
|
nengel@2
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
nengel@2
|
19 */
|
|
nengel@2
|
20
|
|
nengel@2
|
21 #include "asm.S"
|
|
nengel@2
|
22
|
|
nengel@2
|
23 preserve8
|
|
nengel@2
|
24
|
|
nengel@2
|
25 .text
|
|
nengel@2
|
26
|
|
nengel@2
|
27 .macro call_2x_pixels type, subp
|
|
nengel@2
|
28 function ff_\type\()_pixels16\subp\()_armv6, export=1
|
|
nengel@2
|
29 push {r0-r3, lr}
|
|
nengel@2
|
30 bl ff_\type\()_pixels8\subp\()_armv6
|
|
nengel@2
|
31 pop {r0-r3, lr}
|
|
nengel@2
|
32 add r0, r0, #8
|
|
nengel@2
|
33 add r1, r1, #8
|
|
nengel@2
|
34 b ff_\type\()_pixels8\subp\()_armv6
|
|
nengel@2
|
35 endfunc
|
|
nengel@2
|
36 .endm
|
|
nengel@2
|
37
|
|
nengel@2
|
38 call_2x_pixels avg
|
|
nengel@2
|
39 call_2x_pixels put, _x2
|
|
nengel@2
|
40 call_2x_pixels put, _y2
|
|
nengel@2
|
41 call_2x_pixels put, _x2_no_rnd
|
|
nengel@2
|
42 call_2x_pixels put, _y2_no_rnd
|
|
nengel@2
|
43
|
|
nengel@2
|
44 function ff_put_pixels16_armv6, export=1
|
|
nengel@2
|
45 push {r4-r11}
|
|
nengel@2
|
46 1:
|
|
nengel@2
|
47 ldr r5, [r1, #4]
|
|
nengel@2
|
48 ldr r6, [r1, #8]
|
|
nengel@2
|
49 ldr r7, [r1, #12]
|
|
nengel@2
|
50 ldr r4, [r1], r2
|
|
nengel@2
|
51 strd r6, r7, [r0, #8]
|
|
nengel@2
|
52 ldr r9, [r1, #4]
|
|
nengel@2
|
53 strd r4, r5, [r0], r2
|
|
nengel@2
|
54 ldr r10, [r1, #8]
|
|
nengel@2
|
55 ldr r11, [r1, #12]
|
|
nengel@2
|
56 ldr r8, [r1], r2
|
|
nengel@2
|
57 strd r10, r11, [r0, #8]
|
|
nengel@2
|
58 subs r3, r3, #2
|
|
nengel@2
|
59 strd r8, r9, [r0], r2
|
|
nengel@2
|
60 bne 1b
|
|
nengel@2
|
61
|
|
nengel@2
|
62 pop {r4-r11}
|
|
nengel@2
|
63 bx lr
|
|
nengel@2
|
64 endfunc
|
|
nengel@2
|
65
|
|
nengel@2
|
66 function ff_put_pixels8_armv6, export=1
|
|
nengel@2
|
67 push {r4-r7}
|
|
nengel@2
|
68 1:
|
|
nengel@2
|
69 ldr r5, [r1, #4]
|
|
nengel@2
|
70 ldr r4, [r1], r2
|
|
nengel@2
|
71 ldr r7, [r1, #4]
|
|
nengel@2
|
72 strd r4, r5, [r0], r2
|
|
nengel@2
|
73 ldr r6, [r1], r2
|
|
nengel@2
|
74 subs r3, r3, #2
|
|
nengel@2
|
75 strd r6, r7, [r0], r2
|
|
nengel@2
|
76 bne 1b
|
|
nengel@2
|
77
|
|
nengel@2
|
78 pop {r4-r7}
|
|
nengel@2
|
79 bx lr
|
|
nengel@2
|
80 endfunc
|
|
nengel@2
|
81
|
|
nengel@2
|
82 function ff_put_pixels8_x2_armv6, export=1
|
|
nengel@2
|
83 push {r4-r11, lr}
|
|
nengel@2
|
84 mov r12, #1
|
|
nengel@2
|
85 orr r12, r12, r12, lsl #8
|
|
nengel@2
|
86 orr r12, r12, r12, lsl #16
|
|
nengel@2
|
87 1:
|
|
nengel@2
|
88 ldr r4, [r1]
|
|
nengel@2
|
89 subs r3, r3, #2
|
|
nengel@2
|
90 ldr r5, [r1, #4]
|
|
nengel@2
|
91 ldr r7, [r1, #5]
|
|
nengel@2
|
92 lsr r6, r4, #8
|
|
nengel@2
|
93 ldr r8, [r1, r2]!
|
|
nengel@2
|
94 orr r6, r6, r5, lsl #24
|
|
nengel@2
|
95 ldr r9, [r1, #4]
|
|
nengel@2
|
96 ldr r11, [r1, #5]
|
|
nengel@2
|
97 lsr r10, r8, #8
|
|
nengel@2
|
98 add r1, r1, r2
|
|
nengel@2
|
99 orr r10, r10, r9, lsl #24
|
|
nengel@2
|
100 eor r14, r4, r6
|
|
nengel@2
|
101 uhadd8 r4, r4, r6
|
|
nengel@2
|
102 eor r6, r5, r7
|
|
nengel@2
|
103 uhadd8 r5, r5, r7
|
|
nengel@2
|
104 and r14, r14, r12
|
|
nengel@2
|
105 and r6, r6, r12
|
|
nengel@2
|
106 uadd8 r4, r4, r14
|
|
nengel@2
|
107 eor r14, r8, r10
|
|
nengel@2
|
108 uadd8 r5, r5, r6
|
|
nengel@2
|
109 eor r6, r9, r11
|
|
nengel@2
|
110 uhadd8 r8, r8, r10
|
|
nengel@2
|
111 and r14, r14, r12
|
|
nengel@2
|
112 uhadd8 r9, r9, r11
|
|
nengel@2
|
113 and r6, r6, r12
|
|
nengel@2
|
114 uadd8 r8, r8, r14
|
|
nengel@2
|
115 strd r4, r5, [r0], r2
|
|
nengel@2
|
116 uadd8 r9, r9, r6
|
|
nengel@2
|
117 strd r8, r9, [r0], r2
|
|
nengel@2
|
118 bne 1b
|
|
nengel@2
|
119
|
|
nengel@2
|
120 pop {r4-r11, pc}
|
|
nengel@2
|
121 endfunc
|
|
nengel@2
|
122
|
|
nengel@2
|
123 function ff_put_pixels8_y2_armv6, export=1
|
|
nengel@2
|
124 push {r4-r11}
|
|
nengel@2
|
125 mov r12, #1
|
|
nengel@2
|
126 orr r12, r12, r12, lsl #8
|
|
nengel@2
|
127 orr r12, r12, r12, lsl #16
|
|
nengel@2
|
128 ldr r4, [r1]
|
|
nengel@2
|
129 ldr r5, [r1, #4]
|
|
nengel@2
|
130 ldr r6, [r1, r2]!
|
|
nengel@2
|
131 ldr r7, [r1, #4]
|
|
nengel@2
|
132 1:
|
|
nengel@2
|
133 subs r3, r3, #2
|
|
nengel@2
|
134 uhadd8 r8, r4, r6
|
|
nengel@2
|
135 eor r10, r4, r6
|
|
nengel@2
|
136 uhadd8 r9, r5, r7
|
|
nengel@2
|
137 eor r11, r5, r7
|
|
nengel@2
|
138 and r10, r10, r12
|
|
nengel@2
|
139 ldr r4, [r1, r2]!
|
|
nengel@2
|
140 uadd8 r8, r8, r10
|
|
nengel@2
|
141 and r11, r11, r12
|
|
nengel@2
|
142 uadd8 r9, r9, r11
|
|
nengel@2
|
143 ldr r5, [r1, #4]
|
|
nengel@2
|
144 uhadd8 r10, r4, r6
|
|
nengel@2
|
145 eor r6, r4, r6
|
|
nengel@2
|
146 uhadd8 r11, r5, r7
|
|
nengel@2
|
147 and r6, r6, r12
|
|
nengel@2
|
148 eor r7, r5, r7
|
|
nengel@2
|
149 uadd8 r10, r10, r6
|
|
nengel@2
|
150 and r7, r7, r12
|
|
nengel@2
|
151 ldr r6, [r1, r2]!
|
|
nengel@2
|
152 uadd8 r11, r11, r7
|
|
nengel@2
|
153 strd r8, r9, [r0], r2
|
|
nengel@2
|
154 ldr r7, [r1, #4]
|
|
nengel@2
|
155 strd r10, r11, [r0], r2
|
|
nengel@2
|
156 bne 1b
|
|
nengel@2
|
157
|
|
nengel@2
|
158 pop {r4-r11}
|
|
nengel@2
|
159 bx lr
|
|
nengel@2
|
160 endfunc
|
|
nengel@2
|
161
|
|
nengel@2
|
162 function ff_put_pixels8_x2_no_rnd_armv6, export=1
|
|
nengel@2
|
163 push {r4-r9, lr}
|
|
nengel@2
|
164 1:
|
|
nengel@2
|
165 subs r3, r3, #2
|
|
nengel@2
|
166 ldr r4, [r1]
|
|
nengel@2
|
167 ldr r5, [r1, #4]
|
|
nengel@2
|
168 ldr r7, [r1, #5]
|
|
nengel@2
|
169 ldr r8, [r1, r2]!
|
|
nengel@2
|
170 ldr r9, [r1, #4]
|
|
nengel@2
|
171 ldr r14, [r1, #5]
|
|
nengel@2
|
172 add r1, r1, r2
|
|
nengel@2
|
173 lsr r6, r4, #8
|
|
nengel@2
|
174 orr r6, r6, r5, lsl #24
|
|
nengel@2
|
175 lsr r12, r8, #8
|
|
nengel@2
|
176 orr r12, r12, r9, lsl #24
|
|
nengel@2
|
177 uhadd8 r4, r4, r6
|
|
nengel@2
|
178 uhadd8 r5, r5, r7
|
|
nengel@2
|
179 uhadd8 r8, r8, r12
|
|
nengel@2
|
180 uhadd8 r9, r9, r14
|
|
nengel@2
|
181 stm r0, {r4,r5}
|
|
nengel@2
|
182 add r0, r0, r2
|
|
nengel@2
|
183 stm r0, {r8,r9}
|
|
nengel@2
|
184 add r0, r0, r2
|
|
nengel@2
|
185 bne 1b
|
|
nengel@2
|
186
|
|
nengel@2
|
187 pop {r4-r9, pc}
|
|
nengel@2
|
188 endfunc
|
|
nengel@2
|
189
|
|
nengel@2
|
190 function ff_put_pixels8_y2_no_rnd_armv6, export=1
|
|
nengel@2
|
191 push {r4-r9, lr}
|
|
nengel@2
|
192 ldr r4, [r1]
|
|
nengel@2
|
193 ldr r5, [r1, #4]
|
|
nengel@2
|
194 ldr r6, [r1, r2]!
|
|
nengel@2
|
195 ldr r7, [r1, #4]
|
|
nengel@2
|
196 1:
|
|
nengel@2
|
197 subs r3, r3, #2
|
|
nengel@2
|
198 uhadd8 r8, r4, r6
|
|
nengel@2
|
199 ldr r4, [r1, r2]!
|
|
nengel@2
|
200 uhadd8 r9, r5, r7
|
|
nengel@2
|
201 ldr r5, [r1, #4]
|
|
nengel@2
|
202 uhadd8 r12, r4, r6
|
|
nengel@2
|
203 ldr r6, [r1, r2]!
|
|
nengel@2
|
204 uhadd8 r14, r5, r7
|
|
nengel@2
|
205 ldr r7, [r1, #4]
|
|
nengel@2
|
206 stm r0, {r8,r9}
|
|
nengel@2
|
207 add r0, r0, r2
|
|
nengel@2
|
208 stm r0, {r12,r14}
|
|
nengel@2
|
209 add r0, r0, r2
|
|
nengel@2
|
210 bne 1b
|
|
nengel@2
|
211
|
|
nengel@2
|
212 pop {r4-r9, pc}
|
|
nengel@2
|
213 endfunc
|
|
nengel@2
|
214
|
|
nengel@2
|
215 function ff_avg_pixels8_armv6, export=1
|
|
nengel@2
|
216 pld [r1, r2]
|
|
nengel@2
|
217 push {r4-r10, lr}
|
|
nengel@2
|
218 mov lr, #1
|
|
nengel@2
|
219 orr lr, lr, lr, lsl #8
|
|
nengel@2
|
220 orr lr, lr, lr, lsl #16
|
|
nengel@2
|
221 ldrd r4, r5, [r0]
|
|
nengel@2
|
222 ldr r10, [r1, #4]
|
|
nengel@2
|
223 ldr r9, [r1], r2
|
|
nengel@2
|
224 subs r3, r3, #2
|
|
nengel@2
|
225 1:
|
|
nengel@2
|
226 pld [r1, r2]
|
|
nengel@2
|
227 eor r8, r4, r9
|
|
nengel@2
|
228 uhadd8 r4, r4, r9
|
|
nengel@2
|
229 eor r12, r5, r10
|
|
nengel@2
|
230 ldrd r6, r7, [r0, r2]
|
|
nengel@2
|
231 uhadd8 r5, r5, r10
|
|
nengel@2
|
232 and r8, r8, lr
|
|
nengel@2
|
233 ldr r10, [r1, #4]
|
|
nengel@2
|
234 and r12, r12, lr
|
|
nengel@2
|
235 uadd8 r4, r4, r8
|
|
nengel@2
|
236 ldr r9, [r1], r2
|
|
nengel@2
|
237 eor r8, r6, r9
|
|
nengel@2
|
238 uadd8 r5, r5, r12
|
|
nengel@2
|
239 pld [r1, r2, lsl #1]
|
|
nengel@2
|
240 eor r12, r7, r10
|
|
nengel@2
|
241 uhadd8 r6, r6, r9
|
|
nengel@2
|
242 strd r4, r5, [r0], r2
|
|
nengel@2
|
243 uhadd8 r7, r7, r10
|
|
nengel@2
|
244 beq 2f
|
|
nengel@2
|
245 and r8, r8, lr
|
|
nengel@2
|
246 ldrd r4, r5, [r0, r2]
|
|
nengel@2
|
247 uadd8 r6, r6, r8
|
|
nengel@2
|
248 ldr r10, [r1, #4]
|
|
nengel@2
|
249 and r12, r12, lr
|
|
nengel@2
|
250 subs r3, r3, #2
|
|
nengel@2
|
251 uadd8 r7, r7, r12
|
|
nengel@2
|
252 ldr r9, [r1], r2
|
|
nengel@2
|
253 strd r6, r7, [r0], r2
|
|
nengel@2
|
254 b 1b
|
|
nengel@2
|
255 2:
|
|
nengel@2
|
256 and r8, r8, lr
|
|
nengel@2
|
257 and r12, r12, lr
|
|
nengel@2
|
258 uadd8 r6, r6, r8
|
|
nengel@2
|
259 uadd8 r7, r7, r12
|
|
nengel@2
|
260 strd r6, r7, [r0], r2
|
|
nengel@2
|
261
|
|
nengel@2
|
262 pop {r4-r10, pc}
|
|
nengel@2
|
263 endfunc
|
|
nengel@2
|
264
|
|
nengel@2
|
265 function ff_add_pixels_clamped_armv6, export=1
|
|
nengel@2
|
266 push {r4-r8,lr}
|
|
nengel@2
|
267 mov r3, #8
|
|
nengel@2
|
268 1:
|
|
nengel@2
|
269 ldm r0!, {r4,r5,r12,lr}
|
|
nengel@2
|
270 ldrd r6, r7, [r1]
|
|
nengel@2
|
271 pkhbt r8, r4, r5, lsl #16
|
|
nengel@2
|
272 pkhtb r5, r5, r4, asr #16
|
|
nengel@2
|
273 pkhbt r4, r12, lr, lsl #16
|
|
nengel@2
|
274 pkhtb lr, lr, r12, asr #16
|
|
nengel@2
|
275 pld [r1, r2]
|
|
nengel@2
|
276 uxtab16 r8, r8, r6
|
|
nengel@2
|
277 uxtab16 r5, r5, r6, ror #8
|
|
nengel@2
|
278 uxtab16 r4, r4, r7
|
|
nengel@2
|
279 uxtab16 lr, lr, r7, ror #8
|
|
nengel@2
|
280 usat16 r8, #8, r8
|
|
nengel@2
|
281 usat16 r5, #8, r5
|
|
nengel@2
|
282 usat16 r4, #8, r4
|
|
nengel@2
|
283 usat16 lr, #8, lr
|
|
nengel@2
|
284 orr r6, r8, r5, lsl #8
|
|
nengel@2
|
285 orr r7, r4, lr, lsl #8
|
|
nengel@2
|
286 subs r3, r3, #1
|
|
nengel@2
|
287 strd r6, r7, [r1], r2
|
|
nengel@2
|
288 bgt 1b
|
|
nengel@2
|
289 pop {r4-r8,pc}
|
|
nengel@2
|
290 endfunc
|
|
nengel@2
|
291
|
|
nengel@2
|
292 function ff_get_pixels_armv6, export=1
|
|
nengel@2
|
293 pld [r1, r2]
|
|
nengel@2
|
294 push {r4-r8, lr}
|
|
nengel@2
|
295 mov lr, #8
|
|
nengel@2
|
296 1:
|
|
nengel@2
|
297 ldrd r4, r5, [r1], r2
|
|
nengel@2
|
298 subs lr, lr, #1
|
|
nengel@2
|
299 uxtb16 r6, r4
|
|
nengel@2
|
300 uxtb16 r4, r4, ror #8
|
|
nengel@2
|
301 uxtb16 r12, r5
|
|
nengel@2
|
302 uxtb16 r8, r5, ror #8
|
|
nengel@2
|
303 pld [r1, r2]
|
|
nengel@2
|
304 pkhbt r5, r6, r4, lsl #16
|
|
nengel@2
|
305 pkhtb r6, r4, r6, asr #16
|
|
nengel@2
|
306 pkhbt r7, r12, r8, lsl #16
|
|
nengel@2
|
307 pkhtb r12, r8, r12, asr #16
|
|
nengel@2
|
308 stm r0!, {r5,r6,r7,r12}
|
|
nengel@2
|
309 bgt 1b
|
|
nengel@2
|
310
|
|
nengel@2
|
311 pop {r4-r8, pc}
|
|
nengel@2
|
312 endfunc
|
|
nengel@2
|
313
|
|
nengel@2
|
314 function ff_diff_pixels_armv6, export=1
|
|
nengel@2
|
315 pld [r1, r3]
|
|
nengel@2
|
316 pld [r2, r3]
|
|
nengel@2
|
317 push {r4-r9, lr}
|
|
nengel@2
|
318 mov lr, #8
|
|
nengel@2
|
319 1:
|
|
nengel@2
|
320 ldrd r4, r5, [r1], r3
|
|
nengel@2
|
321 ldrd r6, r7, [r2], r3
|
|
nengel@2
|
322 uxtb16 r8, r4
|
|
nengel@2
|
323 uxtb16 r4, r4, ror #8
|
|
nengel@2
|
324 uxtb16 r9, r6
|
|
nengel@2
|
325 uxtb16 r6, r6, ror #8
|
|
nengel@2
|
326 pld [r1, r3]
|
|
nengel@2
|
327 ssub16 r9, r8, r9
|
|
nengel@2
|
328 ssub16 r6, r4, r6
|
|
nengel@2
|
329 uxtb16 r8, r5
|
|
nengel@2
|
330 uxtb16 r5, r5, ror #8
|
|
nengel@2
|
331 pld [r2, r3]
|
|
nengel@2
|
332 pkhbt r4, r9, r6, lsl #16
|
|
nengel@2
|
333 pkhtb r6, r6, r9, asr #16
|
|
nengel@2
|
334 uxtb16 r9, r7
|
|
nengel@2
|
335 uxtb16 r7, r7, ror #8
|
|
nengel@2
|
336 ssub16 r9, r8, r9
|
|
nengel@2
|
337 ssub16 r5, r5, r7
|
|
nengel@2
|
338 subs lr, lr, #1
|
|
nengel@2
|
339 pkhbt r8, r9, r5, lsl #16
|
|
nengel@2
|
340 pkhtb r9, r5, r9, asr #16
|
|
nengel@2
|
341 stm r0!, {r4,r6,r8,r9}
|
|
nengel@2
|
342 bgt 1b
|
|
nengel@2
|
343
|
|
nengel@2
|
344 pop {r4-r9, pc}
|
|
nengel@2
|
345 endfunc
|
|
nengel@2
|
346
|
|
nengel@2
|
347 function ff_pix_abs16_armv6, export=1
|
|
nengel@2
|
348 ldr r0, [sp]
|
|
nengel@2
|
349 push {r4-r9, lr}
|
|
nengel@2
|
350 mov r12, #0
|
|
nengel@2
|
351 mov lr, #0
|
|
nengel@2
|
352 ldm r1, {r4-r7}
|
|
nengel@2
|
353 ldr r8, [r2]
|
|
nengel@2
|
354 1:
|
|
nengel@2
|
355 ldr r9, [r2, #4]
|
|
nengel@2
|
356 pld [r1, r3]
|
|
nengel@2
|
357 usada8 r12, r4, r8, r12
|
|
nengel@2
|
358 ldr r8, [r2, #8]
|
|
nengel@2
|
359 pld [r2, r3]
|
|
nengel@2
|
360 usada8 lr, r5, r9, lr
|
|
nengel@2
|
361 ldr r9, [r2, #12]
|
|
nengel@2
|
362 usada8 r12, r6, r8, r12
|
|
nengel@2
|
363 subs r0, r0, #1
|
|
nengel@2
|
364 usada8 lr, r7, r9, lr
|
|
nengel@2
|
365 beq 2f
|
|
nengel@2
|
366 add r1, r1, r3
|
|
nengel@2
|
367 ldm r1, {r4-r7}
|
|
nengel@2
|
368 add r2, r2, r3
|
|
nengel@2
|
369 ldr r8, [r2]
|
|
nengel@2
|
370 b 1b
|
|
nengel@2
|
371 2:
|
|
nengel@2
|
372 add r0, r12, lr
|
|
nengel@2
|
373 pop {r4-r9, pc}
|
|
nengel@2
|
374 endfunc
|
|
nengel@2
|
375
|
|
nengel@2
|
376 function ff_pix_abs16_x2_armv6, export=1
|
|
nengel@2
|
377 ldr r12, [sp]
|
|
nengel@2
|
378 push {r4-r11, lr}
|
|
nengel@2
|
379 mov r0, #0
|
|
nengel@2
|
380 mov lr, #1
|
|
nengel@2
|
381 orr lr, lr, lr, lsl #8
|
|
nengel@2
|
382 orr lr, lr, lr, lsl #16
|
|
nengel@2
|
383 1:
|
|
nengel@2
|
384 ldr r8, [r2]
|
|
nengel@2
|
385 ldr r9, [r2, #4]
|
|
nengel@2
|
386 lsr r10, r8, #8
|
|
nengel@2
|
387 ldr r4, [r1]
|
|
nengel@2
|
388 lsr r6, r9, #8
|
|
nengel@2
|
389 orr r10, r10, r9, lsl #24
|
|
nengel@2
|
390 ldr r5, [r2, #8]
|
|
nengel@2
|
391 eor r11, r8, r10
|
|
nengel@2
|
392 uhadd8 r7, r8, r10
|
|
nengel@2
|
393 orr r6, r6, r5, lsl #24
|
|
nengel@2
|
394 and r11, r11, lr
|
|
nengel@2
|
395 uadd8 r7, r7, r11
|
|
nengel@2
|
396 ldr r8, [r1, #4]
|
|
nengel@2
|
397 usada8 r0, r4, r7, r0
|
|
nengel@2
|
398 eor r7, r9, r6
|
|
nengel@2
|
399 lsr r10, r5, #8
|
|
nengel@2
|
400 and r7, r7, lr
|
|
nengel@2
|
401 uhadd8 r4, r9, r6
|
|
nengel@2
|
402 ldr r6, [r2, #12]
|
|
nengel@2
|
403 uadd8 r4, r4, r7
|
|
nengel@2
|
404 pld [r1, r3]
|
|
nengel@2
|
405 orr r10, r10, r6, lsl #24
|
|
nengel@2
|
406 usada8 r0, r8, r4, r0
|
|
nengel@2
|
407 ldr r4, [r1, #8]
|
|
nengel@2
|
408 eor r11, r5, r10
|
|
nengel@2
|
409 ldrb r7, [r2, #16]
|
|
nengel@2
|
410 and r11, r11, lr
|
|
nengel@2
|
411 uhadd8 r8, r5, r10
|
|
nengel@2
|
412 ldr r5, [r1, #12]
|
|
nengel@2
|
413 uadd8 r8, r8, r11
|
|
nengel@2
|
414 pld [r2, r3]
|
|
nengel@2
|
415 lsr r10, r6, #8
|
|
nengel@2
|
416 usada8 r0, r4, r8, r0
|
|
nengel@2
|
417 orr r10, r10, r7, lsl #24
|
|
nengel@2
|
418 subs r12, r12, #1
|
|
nengel@2
|
419 eor r11, r6, r10
|
|
nengel@2
|
420 add r1, r1, r3
|
|
nengel@2
|
421 uhadd8 r9, r6, r10
|
|
nengel@2
|
422 and r11, r11, lr
|
|
nengel@2
|
423 uadd8 r9, r9, r11
|
|
nengel@2
|
424 add r2, r2, r3
|
|
nengel@2
|
425 usada8 r0, r5, r9, r0
|
|
nengel@2
|
426 bgt 1b
|
|
nengel@2
|
427
|
|
nengel@2
|
428 pop {r4-r11, pc}
|
|
nengel@2
|
429 endfunc
|
|
nengel@2
|
430
|
|
nengel@2
|
431 .macro usad_y2 p0, p1, p2, p3, n0, n1, n2, n3
|
|
nengel@2
|
432 ldr \n0, [r2]
|
|
nengel@2
|
433 eor \n1, \p0, \n0
|
|
nengel@2
|
434 uhadd8 \p0, \p0, \n0
|
|
nengel@2
|
435 and \n1, \n1, lr
|
|
nengel@2
|
436 ldr \n2, [r1]
|
|
nengel@2
|
437 uadd8 \p0, \p0, \n1
|
|
nengel@2
|
438 ldr \n1, [r2, #4]
|
|
nengel@2
|
439 usada8 r0, \p0, \n2, r0
|
|
nengel@2
|
440 pld [r1, r3]
|
|
nengel@2
|
441 eor \n3, \p1, \n1
|
|
nengel@2
|
442 uhadd8 \p1, \p1, \n1
|
|
nengel@2
|
443 and \n3, \n3, lr
|
|
nengel@2
|
444 ldr \p0, [r1, #4]
|
|
nengel@2
|
445 uadd8 \p1, \p1, \n3
|
|
nengel@2
|
446 ldr \n2, [r2, #8]
|
|
nengel@2
|
447 usada8 r0, \p1, \p0, r0
|
|
nengel@2
|
448 pld [r2, r3]
|
|
nengel@2
|
449 eor \p0, \p2, \n2
|
|
nengel@2
|
450 uhadd8 \p2, \p2, \n2
|
|
nengel@2
|
451 and \p0, \p0, lr
|
|
nengel@2
|
452 ldr \p1, [r1, #8]
|
|
nengel@2
|
453 uadd8 \p2, \p2, \p0
|
|
nengel@2
|
454 ldr \n3, [r2, #12]
|
|
nengel@2
|
455 usada8 r0, \p2, \p1, r0
|
|
nengel@2
|
456 eor \p1, \p3, \n3
|
|
nengel@2
|
457 uhadd8 \p3, \p3, \n3
|
|
nengel@2
|
458 and \p1, \p1, lr
|
|
nengel@2
|
459 ldr \p0, [r1, #12]
|
|
nengel@2
|
460 uadd8 \p3, \p3, \p1
|
|
nengel@2
|
461 add r1, r1, r3
|
|
nengel@2
|
462 usada8 r0, \p3, \p0, r0
|
|
nengel@2
|
463 add r2, r2, r3
|
|
nengel@2
|
464 .endm
|
|
nengel@2
|
465
|
|
nengel@2
|
466 function ff_pix_abs16_y2_armv6, export=1
|
|
nengel@2
|
467 pld [r1]
|
|
nengel@2
|
468 pld [r2]
|
|
nengel@2
|
469 ldr r12, [sp]
|
|
nengel@2
|
470 push {r4-r11, lr}
|
|
nengel@2
|
471 mov r0, #0
|
|
nengel@2
|
472 mov lr, #1
|
|
nengel@2
|
473 orr lr, lr, lr, lsl #8
|
|
nengel@2
|
474 orr lr, lr, lr, lsl #16
|
|
nengel@2
|
475 ldr r4, [r2]
|
|
nengel@2
|
476 ldr r5, [r2, #4]
|
|
nengel@2
|
477 ldr r6, [r2, #8]
|
|
nengel@2
|
478 ldr r7, [r2, #12]
|
|
nengel@2
|
479 add r2, r2, r3
|
|
nengel@2
|
480 1:
|
|
nengel@2
|
481 usad_y2 r4, r5, r6, r7, r8, r9, r10, r11
|
|
nengel@2
|
482 subs r12, r12, #2
|
|
nengel@2
|
483 usad_y2 r8, r9, r10, r11, r4, r5, r6, r7
|
|
nengel@2
|
484 bgt 1b
|
|
nengel@2
|
485
|
|
nengel@2
|
486 pop {r4-r11, pc}
|
|
nengel@2
|
487 endfunc
|
|
nengel@2
|
488
|
|
nengel@2
|
489 function ff_pix_abs8_armv6, export=1
|
|
nengel@2
|
490 pld [r2, r3]
|
|
nengel@2
|
491 ldr r12, [sp]
|
|
nengel@2
|
492 push {r4-r9, lr}
|
|
nengel@2
|
493 mov r0, #0
|
|
nengel@2
|
494 mov lr, #0
|
|
nengel@2
|
495 ldrd r4, r5, [r1], r3
|
|
nengel@2
|
496 1:
|
|
nengel@2
|
497 subs r12, r12, #2
|
|
nengel@2
|
498 ldr r7, [r2, #4]
|
|
nengel@2
|
499 ldr r6, [r2], r3
|
|
nengel@2
|
500 ldrd r8, r9, [r1], r3
|
|
nengel@2
|
501 usada8 r0, r4, r6, r0
|
|
nengel@2
|
502 pld [r2, r3]
|
|
nengel@2
|
503 usada8 lr, r5, r7, lr
|
|
nengel@2
|
504 ldr r7, [r2, #4]
|
|
nengel@2
|
505 ldr r6, [r2], r3
|
|
nengel@2
|
506 beq 2f
|
|
nengel@2
|
507 ldrd r4, r5, [r1], r3
|
|
nengel@2
|
508 usada8 r0, r8, r6, r0
|
|
nengel@2
|
509 pld [r2, r3]
|
|
nengel@2
|
510 usada8 lr, r9, r7, lr
|
|
nengel@2
|
511 b 1b
|
|
nengel@2
|
512 2:
|
|
nengel@2
|
513 usada8 r0, r8, r6, r0
|
|
nengel@2
|
514 usada8 lr, r9, r7, lr
|
|
nengel@2
|
515 add r0, r0, lr
|
|
nengel@2
|
516 pop {r4-r9, pc}
|
|
nengel@2
|
517 endfunc
|
|
nengel@2
|
518
|
|
nengel@2
|
519 function ff_sse16_armv6, export=1
|
|
nengel@2
|
520 ldr r12, [sp]
|
|
nengel@2
|
521 push {r4-r9, lr}
|
|
nengel@2
|
522 mov r0, #0
|
|
nengel@2
|
523 1:
|
|
nengel@2
|
524 ldrd r4, r5, [r1]
|
|
nengel@2
|
525 ldr r8, [r2]
|
|
nengel@2
|
526 uxtb16 lr, r4
|
|
nengel@2
|
527 uxtb16 r4, r4, ror #8
|
|
nengel@2
|
528 uxtb16 r9, r8
|
|
nengel@2
|
529 uxtb16 r8, r8, ror #8
|
|
nengel@2
|
530 ldr r7, [r2, #4]
|
|
nengel@2
|
531 usub16 lr, lr, r9
|
|
nengel@2
|
532 usub16 r4, r4, r8
|
|
nengel@2
|
533 smlad r0, lr, lr, r0
|
|
nengel@2
|
534 uxtb16 r6, r5
|
|
nengel@2
|
535 uxtb16 lr, r5, ror #8
|
|
nengel@2
|
536 uxtb16 r8, r7
|
|
nengel@2
|
537 uxtb16 r9, r7, ror #8
|
|
nengel@2
|
538 smlad r0, r4, r4, r0
|
|
nengel@2
|
539 ldrd r4, r5, [r1, #8]
|
|
nengel@2
|
540 usub16 r6, r6, r8
|
|
nengel@2
|
541 usub16 r8, lr, r9
|
|
nengel@2
|
542 ldr r7, [r2, #8]
|
|
nengel@2
|
543 smlad r0, r6, r6, r0
|
|
nengel@2
|
544 uxtb16 lr, r4
|
|
nengel@2
|
545 uxtb16 r4, r4, ror #8
|
|
nengel@2
|
546 uxtb16 r9, r7
|
|
nengel@2
|
547 uxtb16 r7, r7, ror #8
|
|
nengel@2
|
548 smlad r0, r8, r8, r0
|
|
nengel@2
|
549 ldr r8, [r2, #12]
|
|
nengel@2
|
550 usub16 lr, lr, r9
|
|
nengel@2
|
551 usub16 r4, r4, r7
|
|
nengel@2
|
552 smlad r0, lr, lr, r0
|
|
nengel@2
|
553 uxtb16 r6, r5
|
|
nengel@2
|
554 uxtb16 r5, r5, ror #8
|
|
nengel@2
|
555 uxtb16 r9, r8
|
|
nengel@2
|
556 uxtb16 r8, r8, ror #8
|
|
nengel@2
|
557 smlad r0, r4, r4, r0
|
|
nengel@2
|
558 usub16 r6, r6, r9
|
|
nengel@2
|
559 usub16 r5, r5, r8
|
|
nengel@2
|
560 smlad r0, r6, r6, r0
|
|
nengel@2
|
561 add r1, r1, r3
|
|
nengel@2
|
562 add r2, r2, r3
|
|
nengel@2
|
563 subs r12, r12, #1
|
|
nengel@2
|
564 smlad r0, r5, r5, r0
|
|
nengel@2
|
565 bgt 1b
|
|
nengel@2
|
566
|
|
nengel@2
|
567 pop {r4-r9, pc}
|
|
nengel@2
|
568 endfunc
|
|
nengel@2
|
569
|
|
nengel@2
|
570 function ff_pix_norm1_armv6, export=1
|
|
nengel@2
|
571 push {r4-r6, lr}
|
|
nengel@2
|
572 mov r12, #16
|
|
nengel@2
|
573 mov lr, #0
|
|
nengel@2
|
574 1:
|
|
nengel@2
|
575 ldm r0, {r2-r5}
|
|
nengel@2
|
576 uxtb16 r6, r2
|
|
nengel@2
|
577 uxtb16 r2, r2, ror #8
|
|
nengel@2
|
578 smlad lr, r6, r6, lr
|
|
nengel@2
|
579 uxtb16 r6, r3
|
|
nengel@2
|
580 smlad lr, r2, r2, lr
|
|
nengel@2
|
581 uxtb16 r3, r3, ror #8
|
|
nengel@2
|
582 smlad lr, r6, r6, lr
|
|
nengel@2
|
583 uxtb16 r6, r4
|
|
nengel@2
|
584 smlad lr, r3, r3, lr
|
|
nengel@2
|
585 uxtb16 r4, r4, ror #8
|
|
nengel@2
|
586 smlad lr, r6, r6, lr
|
|
nengel@2
|
587 uxtb16 r6, r5
|
|
nengel@2
|
588 smlad lr, r4, r4, lr
|
|
nengel@2
|
589 uxtb16 r5, r5, ror #8
|
|
nengel@2
|
590 smlad lr, r6, r6, lr
|
|
nengel@2
|
591 subs r12, r12, #1
|
|
nengel@2
|
592 add r0, r0, r1
|
|
nengel@2
|
593 smlad lr, r5, r5, lr
|
|
nengel@2
|
594 bgt 1b
|
|
nengel@2
|
595
|
|
nengel@2
|
596 mov r0, lr
|
|
nengel@2
|
597 pop {r4-r6, pc}
|
|
nengel@2
|
598 endfunc
|
|
nengel@2
|
599
|
|
nengel@2
|
600 function ff_pix_sum_armv6, export=1
|
|
nengel@2
|
601 push {r4-r7, lr}
|
|
nengel@2
|
602 mov r12, #16
|
|
nengel@2
|
603 mov r2, #0
|
|
nengel@2
|
604 mov r3, #0
|
|
nengel@2
|
605 mov lr, #0
|
|
nengel@2
|
606 ldr r4, [r0]
|
|
nengel@2
|
607 1:
|
|
nengel@2
|
608 subs r12, r12, #1
|
|
nengel@2
|
609 ldr r5, [r0, #4]
|
|
nengel@2
|
610 usada8 r2, r4, lr, r2
|
|
nengel@2
|
611 ldr r6, [r0, #8]
|
|
nengel@2
|
612 usada8 r3, r5, lr, r3
|
|
nengel@2
|
613 ldr r7, [r0, #12]
|
|
nengel@2
|
614 usada8 r2, r6, lr, r2
|
|
nengel@2
|
615 beq 2f
|
|
nengel@2
|
616 ldr r4, [r0, r1]!
|
|
nengel@2
|
617 usada8 r3, r7, lr, r3
|
|
nengel@2
|
618 bgt 1b
|
|
nengel@2
|
619 2:
|
|
nengel@2
|
620 usada8 r3, r7, lr, r3
|
|
nengel@2
|
621 add r0, r2, r3
|
|
nengel@2
|
622 pop {r4-r7, pc}
|
|
nengel@2
|
623 endfunc
|