Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Side by Side Diff: source/libvpx/vp9/common/arm/neon/vp9_reconintra_neon.asm

Issue 812033011: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 ;
2 ; Copyright (c) 2014 The WebM project authors. All Rights Reserved.
3 ;
4 ; Use of this source code is governed by a BSD-style license
5 ; that can be found in the LICENSE file in the root of the source
6 ; tree. An additional intellectual property rights grant can be found
7 ; in the file PATENTS. All contributing project authors may
8 ; be found in the AUTHORS file in the root of the source tree.
9 ;
10
11 EXPORT |vp9_v_predictor_4x4_neon|
12 EXPORT |vp9_v_predictor_8x8_neon|
13 EXPORT |vp9_v_predictor_16x16_neon|
14 EXPORT |vp9_v_predictor_32x32_neon|
15 EXPORT |vp9_h_predictor_4x4_neon|
16 EXPORT |vp9_h_predictor_8x8_neon|
17 EXPORT |vp9_h_predictor_16x16_neon|
18 EXPORT |vp9_h_predictor_32x32_neon|
19 EXPORT |vp9_tm_predictor_4x4_neon|
20 EXPORT |vp9_tm_predictor_8x8_neon|
21 EXPORT |vp9_tm_predictor_16x16_neon|
22 EXPORT |vp9_tm_predictor_32x32_neon|
23 ARM
24 REQUIRE8
25 PRESERVE8
26
27 AREA ||.text||, CODE, READONLY, ALIGN=2
28
29 ;void vp9_v_predictor_4x4_neon(uint8_t *dst, ptrdiff_t y_stride,
30 ; const uint8_t *above,
31 ; const uint8_t *left)
32 ; r0 uint8_t *dst
33 ; r1 ptrdiff_t y_stride
34 ; r2 const uint8_t *above
35 ; r3 const uint8_t *left
36
37 |vp9_v_predictor_4x4_neon| PROC
38 vld1.32 {d0[0]}, [r2]
39 vst1.32 {d0[0]}, [r0], r1
40 vst1.32 {d0[0]}, [r0], r1
41 vst1.32 {d0[0]}, [r0], r1
42 vst1.32 {d0[0]}, [r0], r1
43 bx lr
44 ENDP ; |vp9_v_predictor_4x4_neon|
45
46 ;void vp9_v_predictor_8x8_neon(uint8_t *dst, ptrdiff_t y_stride,
47 ; const uint8_t *above,
48 ; const uint8_t *left)
49 ; r0 uint8_t *dst
50 ; r1 ptrdiff_t y_stride
51 ; r2 const uint8_t *above
52 ; r3 const uint8_t *left
53
54 |vp9_v_predictor_8x8_neon| PROC
55 vld1.8 {d0}, [r2]
56 vst1.8 {d0}, [r0], r1
57 vst1.8 {d0}, [r0], r1
58 vst1.8 {d0}, [r0], r1
59 vst1.8 {d0}, [r0], r1
60 vst1.8 {d0}, [r0], r1
61 vst1.8 {d0}, [r0], r1
62 vst1.8 {d0}, [r0], r1
63 vst1.8 {d0}, [r0], r1
64 bx lr
65 ENDP ; |vp9_v_predictor_8x8_neon|
66
67 ;void vp9_v_predictor_16x16_neon(uint8_t *dst, ptrdiff_t y_stride,
68 ; const uint8_t *above,
69 ; const uint8_t *left)
70 ; r0 uint8_t *dst
71 ; r1 ptrdiff_t y_stride
72 ; r2 const uint8_t *above
73 ; r3 const uint8_t *left
74
75 |vp9_v_predictor_16x16_neon| PROC
76 vld1.8 {q0}, [r2]
77 vst1.8 {q0}, [r0], r1
78 vst1.8 {q0}, [r0], r1
79 vst1.8 {q0}, [r0], r1
80 vst1.8 {q0}, [r0], r1
81 vst1.8 {q0}, [r0], r1
82 vst1.8 {q0}, [r0], r1
83 vst1.8 {q0}, [r0], r1
84 vst1.8 {q0}, [r0], r1
85 vst1.8 {q0}, [r0], r1
86 vst1.8 {q0}, [r0], r1
87 vst1.8 {q0}, [r0], r1
88 vst1.8 {q0}, [r0], r1
89 vst1.8 {q0}, [r0], r1
90 vst1.8 {q0}, [r0], r1
91 vst1.8 {q0}, [r0], r1
92 vst1.8 {q0}, [r0], r1
93 bx lr
94 ENDP ; |vp9_v_predictor_16x16_neon|
95
96 ;void vp9_v_predictor_32x32_neon(uint8_t *dst, ptrdiff_t y_stride,
97 ; const uint8_t *above,
98 ; const uint8_t *left)
99 ; r0 uint8_t *dst
100 ; r1 ptrdiff_t y_stride
101 ; r2 const uint8_t *above
102 ; r3 const uint8_t *left
103
104 |vp9_v_predictor_32x32_neon| PROC
105 vld1.8 {q0, q1}, [r2]
106 mov r2, #2
107 loop_v
108 vst1.8 {q0, q1}, [r0], r1
109 vst1.8 {q0, q1}, [r0], r1
110 vst1.8 {q0, q1}, [r0], r1
111 vst1.8 {q0, q1}, [r0], r1
112 vst1.8 {q0, q1}, [r0], r1
113 vst1.8 {q0, q1}, [r0], r1
114 vst1.8 {q0, q1}, [r0], r1
115 vst1.8 {q0, q1}, [r0], r1
116 vst1.8 {q0, q1}, [r0], r1
117 vst1.8 {q0, q1}, [r0], r1
118 vst1.8 {q0, q1}, [r0], r1
119 vst1.8 {q0, q1}, [r0], r1
120 vst1.8 {q0, q1}, [r0], r1
121 vst1.8 {q0, q1}, [r0], r1
122 vst1.8 {q0, q1}, [r0], r1
123 vst1.8 {q0, q1}, [r0], r1
124 subs r2, r2, #1
125 bgt loop_v
126 bx lr
127 ENDP ; |vp9_v_predictor_32x32_neon|
128
129 ;void vp9_h_predictor_4x4_neon(uint8_t *dst, ptrdiff_t y_stride,
130 ; const uint8_t *above,
131 ; const uint8_t *left)
132 ; r0 uint8_t *dst
133 ; r1 ptrdiff_t y_stride
134 ; r2 const uint8_t *above
135 ; r3 const uint8_t *left
136
137 |vp9_h_predictor_4x4_neon| PROC
138 vld1.32 {d1[0]}, [r3]
139 vdup.8 d0, d1[0]
140 vst1.32 {d0[0]}, [r0], r1
141 vdup.8 d0, d1[1]
142 vst1.32 {d0[0]}, [r0], r1
143 vdup.8 d0, d1[2]
144 vst1.32 {d0[0]}, [r0], r1
145 vdup.8 d0, d1[3]
146 vst1.32 {d0[0]}, [r0], r1
147 bx lr
148 ENDP ; |vp9_h_predictor_4x4_neon|
149
150 ;void vp9_h_predictor_8x8_neon(uint8_t *dst, ptrdiff_t y_stride,
151 ; const uint8_t *above,
152 ; const uint8_t *left)
153 ; r0 uint8_t *dst
154 ; r1 ptrdiff_t y_stride
155 ; r2 const uint8_t *above
156 ; r3 const uint8_t *left
157
158 |vp9_h_predictor_8x8_neon| PROC
159 vld1.64 {d1}, [r3]
160 vdup.8 d0, d1[0]
161 vst1.64 {d0}, [r0], r1
162 vdup.8 d0, d1[1]
163 vst1.64 {d0}, [r0], r1
164 vdup.8 d0, d1[2]
165 vst1.64 {d0}, [r0], r1
166 vdup.8 d0, d1[3]
167 vst1.64 {d0}, [r0], r1
168 vdup.8 d0, d1[4]
169 vst1.64 {d0}, [r0], r1
170 vdup.8 d0, d1[5]
171 vst1.64 {d0}, [r0], r1
172 vdup.8 d0, d1[6]
173 vst1.64 {d0}, [r0], r1
174 vdup.8 d0, d1[7]
175 vst1.64 {d0}, [r0], r1
176 bx lr
177 ENDP ; |vp9_h_predictor_8x8_neon|
178
179 ;void vp9_h_predictor_16x16_neon(uint8_t *dst, ptrdiff_t y_stride,
180 ; const uint8_t *above,
181 ; const uint8_t *left)
182 ; r0 uint8_t *dst
183 ; r1 ptrdiff_t y_stride
184 ; r2 const uint8_t *above
185 ; r3 const uint8_t *left
186
187 |vp9_h_predictor_16x16_neon| PROC
188 vld1.8 {q1}, [r3]
189 vdup.8 q0, d2[0]
190 vst1.8 {q0}, [r0], r1
191 vdup.8 q0, d2[1]
192 vst1.8 {q0}, [r0], r1
193 vdup.8 q0, d2[2]
194 vst1.8 {q0}, [r0], r1
195 vdup.8 q0, d2[3]
196 vst1.8 {q0}, [r0], r1
197 vdup.8 q0, d2[4]
198 vst1.8 {q0}, [r0], r1
199 vdup.8 q0, d2[5]
200 vst1.8 {q0}, [r0], r1
201 vdup.8 q0, d2[6]
202 vst1.8 {q0}, [r0], r1
203 vdup.8 q0, d2[7]
204 vst1.8 {q0}, [r0], r1
205 vdup.8 q0, d3[0]
206 vst1.8 {q0}, [r0], r1
207 vdup.8 q0, d3[1]
208 vst1.8 {q0}, [r0], r1
209 vdup.8 q0, d3[2]
210 vst1.8 {q0}, [r0], r1
211 vdup.8 q0, d3[3]
212 vst1.8 {q0}, [r0], r1
213 vdup.8 q0, d3[4]
214 vst1.8 {q0}, [r0], r1
215 vdup.8 q0, d3[5]
216 vst1.8 {q0}, [r0], r1
217 vdup.8 q0, d3[6]
218 vst1.8 {q0}, [r0], r1
219 vdup.8 q0, d3[7]
220 vst1.8 {q0}, [r0], r1
221 bx lr
222 ENDP ; |vp9_h_predictor_16x16_neon|
223
224 ;void vp9_h_predictor_32x32_neon(uint8_t *dst, ptrdiff_t y_stride,
225 ; const uint8_t *above,
226 ; const uint8_t *left)
227 ; r0 uint8_t *dst
228 ; r1 ptrdiff_t y_stride
229 ; r2 const uint8_t *above
230 ; r3 const uint8_t *left
231
232 |vp9_h_predictor_32x32_neon| PROC
233 sub r1, r1, #16
234 mov r2, #2
235 loop_h
236 vld1.8 {q1}, [r3]!
237 vdup.8 q0, d2[0]
238 vst1.8 {q0}, [r0]!
239 vst1.8 {q0}, [r0], r1
240 vdup.8 q0, d2[1]
241 vst1.8 {q0}, [r0]!
242 vst1.8 {q0}, [r0], r1
243 vdup.8 q0, d2[2]
244 vst1.8 {q0}, [r0]!
245 vst1.8 {q0}, [r0], r1
246 vdup.8 q0, d2[3]
247 vst1.8 {q0}, [r0]!
248 vst1.8 {q0}, [r0], r1
249 vdup.8 q0, d2[4]
250 vst1.8 {q0}, [r0]!
251 vst1.8 {q0}, [r0], r1
252 vdup.8 q0, d2[5]
253 vst1.8 {q0}, [r0]!
254 vst1.8 {q0}, [r0], r1
255 vdup.8 q0, d2[6]
256 vst1.8 {q0}, [r0]!
257 vst1.8 {q0}, [r0], r1
258 vdup.8 q0, d2[7]
259 vst1.8 {q0}, [r0]!
260 vst1.8 {q0}, [r0], r1
261 vdup.8 q0, d3[0]
262 vst1.8 {q0}, [r0]!
263 vst1.8 {q0}, [r0], r1
264 vdup.8 q0, d3[1]
265 vst1.8 {q0}, [r0]!
266 vst1.8 {q0}, [r0], r1
267 vdup.8 q0, d3[2]
268 vst1.8 {q0}, [r0]!
269 vst1.8 {q0}, [r0], r1
270 vdup.8 q0, d3[3]
271 vst1.8 {q0}, [r0]!
272 vst1.8 {q0}, [r0], r1
273 vdup.8 q0, d3[4]
274 vst1.8 {q0}, [r0]!
275 vst1.8 {q0}, [r0], r1
276 vdup.8 q0, d3[5]
277 vst1.8 {q0}, [r0]!
278 vst1.8 {q0}, [r0], r1
279 vdup.8 q0, d3[6]
280 vst1.8 {q0}, [r0]!
281 vst1.8 {q0}, [r0], r1
282 vdup.8 q0, d3[7]
283 vst1.8 {q0}, [r0]!
284 vst1.8 {q0}, [r0], r1
285 subs r2, r2, #1
286 bgt loop_h
287 bx lr
288 ENDP ; |vp9_h_predictor_32x32_neon|
289
290 ;void vp9_tm_predictor_4x4_neon (uint8_t *dst, ptrdiff_t y_stride,
291 ; const uint8_t *above,
292 ; const uint8_t *left)
293 ; r0 uint8_t *dst
294 ; r1 ptrdiff_t y_stride
295 ; r2 const uint8_t *above
296 ; r3 const uint8_t *left
297
298 |vp9_tm_predictor_4x4_neon| PROC
299 ; Load ytop_left = above[-1];
300 sub r12, r2, #1
301 ldrb r12, [r12]
302 vdup.u8 d0, r12
303
304 ; Load above 4 pixels
305 vld1.32 {d2[0]}, [r2]
306
307 ; Compute above - ytop_left
308 vsubl.u8 q3, d2, d0
309
310 ; Load left row by row and compute left + (above - ytop_left)
311 ; 1st row and 2nd row
312 ldrb r12, [r3], #1
313 ldrb r2, [r3], #1
314 vdup.u16 q1, r12
315 vdup.u16 q2, r2
316 vadd.s16 q1, q1, q3
317 vadd.s16 q2, q2, q3
318 vqmovun.s16 d0, q1
319 vqmovun.s16 d1, q2
320 vst1.32 {d0[0]}, [r0], r1
321 vst1.32 {d1[0]}, [r0], r1
322
323 ; 3rd row and 4th row
324 ldrb r12, [r3], #1
325 ldrb r2, [r3], #1
326 vdup.u16 q1, r12
327 vdup.u16 q2, r2
328 vadd.s16 q1, q1, q3
329 vadd.s16 q2, q2, q3
330 vqmovun.s16 d0, q1
331 vqmovun.s16 d1, q2
332 vst1.32 {d0[0]}, [r0], r1
333 vst1.32 {d1[0]}, [r0], r1
334 bx lr
335 ENDP ; |vp9_tm_predictor_4x4_neon|
336
337 ;void vp9_tm_predictor_8x8_neon (uint8_t *dst, ptrdiff_t y_stride,
338 ; const uint8_t *above,
339 ; const uint8_t *left)
340 ; r0 uint8_t *dst
341 ; r1 ptrdiff_t y_stride
342 ; r2 const uint8_t *above
343 ; r3 const uint8_t *left
344
345 |vp9_tm_predictor_8x8_neon| PROC
346 ; Load ytop_left = above[-1];
347 sub r12, r2, #1
348 ldrb r12, [r12]
349 vdup.u8 d0, r12
350
351 ; preload 8 left
352 vld1.8 {d30}, [r3]
353
354 ; Load above 8 pixels
355 vld1.64 {d2}, [r2]
356
357 vmovl.u8 q10, d30
358
359 ; Compute above - ytop_left
360 vsubl.u8 q3, d2, d0
361
362 ; Load left row by row and compute left + (above - ytop_left)
363 ; 1st row and 2nd row
364 vdup.16 q0, d20[0]
365 vdup.16 q1, d20[1]
366 vadd.s16 q0, q3, q0
367 vadd.s16 q1, q3, q1
368
369 ; 3rd row and 4th row
370 vdup.16 q8, d20[2]
371 vdup.16 q9, d20[3]
372 vadd.s16 q8, q3, q8
373 vadd.s16 q9, q3, q9
374
375 vqmovun.s16 d0, q0
376 vqmovun.s16 d1, q1
377 vqmovun.s16 d2, q8
378 vqmovun.s16 d3, q9
379
380 vst1.64 {d0}, [r0], r1
381 vst1.64 {d1}, [r0], r1
382 vst1.64 {d2}, [r0], r1
383 vst1.64 {d3}, [r0], r1
384
385 ; 5th row and 6th row
386 vdup.16 q0, d21[0]
387 vdup.16 q1, d21[1]
388 vadd.s16 q0, q3, q0
389 vadd.s16 q1, q3, q1
390
391 ; 7th row and 8th row
392 vdup.16 q8, d21[2]
393 vdup.16 q9, d21[3]
394 vadd.s16 q8, q3, q8
395 vadd.s16 q9, q3, q9
396
397 vqmovun.s16 d0, q0
398 vqmovun.s16 d1, q1
399 vqmovun.s16 d2, q8
400 vqmovun.s16 d3, q9
401
402 vst1.64 {d0}, [r0], r1
403 vst1.64 {d1}, [r0], r1
404 vst1.64 {d2}, [r0], r1
405 vst1.64 {d3}, [r0], r1
406
407 bx lr
408 ENDP ; |vp9_tm_predictor_8x8_neon|
409
410 ;void vp9_tm_predictor_16x16_neon (uint8_t *dst, ptrdiff_t y_stride,
411 ; const uint8_t *above,
412 ; const uint8_t *left)
413 ; r0 uint8_t *dst
414 ; r1 ptrdiff_t y_stride
415 ; r2 const uint8_t *above
416 ; r3 const uint8_t *left
417
418 |vp9_tm_predictor_16x16_neon| PROC
419 ; Load ytop_left = above[-1];
420 sub r12, r2, #1
421 ldrb r12, [r12]
422 vdup.u8 q0, r12
423
424 ; Load above 8 pixels
425 vld1.8 {q1}, [r2]
426
427 ; preload 8 left into r12
428 vld1.8 {d18}, [r3]!
429
430 ; Compute above - ytop_left
431 vsubl.u8 q2, d2, d0
432 vsubl.u8 q3, d3, d1
433
434 vmovl.u8 q10, d18
435
436 ; Load left row by row and compute left + (above - ytop_left)
437 ; Process 8 rows in each single loop and loop 2 times to process 16 rows.
438 mov r2, #2
439
440 loop_16x16_neon
441 ; Process two rows.
442 vdup.16 q0, d20[0]
443 vdup.16 q8, d20[1]
444 vadd.s16 q1, q0, q2
445 vadd.s16 q0, q0, q3
446 vadd.s16 q11, q8, q2
447 vadd.s16 q8, q8, q3
448 vqmovun.s16 d2, q1
449 vqmovun.s16 d3, q0
450 vqmovun.s16 d22, q11
451 vqmovun.s16 d23, q8
452 vdup.16 q0, d20[2] ; proload next 2 rows data
453 vdup.16 q8, d20[3]
454 vst1.64 {d2,d3}, [r0], r1
455 vst1.64 {d22,d23}, [r0], r1
456
457 ; Process two rows.
458 vadd.s16 q1, q0, q2
459 vadd.s16 q0, q0, q3
460 vadd.s16 q11, q8, q2
461 vadd.s16 q8, q8, q3
462 vqmovun.s16 d2, q1
463 vqmovun.s16 d3, q0
464 vqmovun.s16 d22, q11
465 vqmovun.s16 d23, q8
466 vdup.16 q0, d21[0] ; proload next 2 rows data
467 vdup.16 q8, d21[1]
468 vst1.64 {d2,d3}, [r0], r1
469 vst1.64 {d22,d23}, [r0], r1
470
471 vadd.s16 q1, q0, q2
472 vadd.s16 q0, q0, q3
473 vadd.s16 q11, q8, q2
474 vadd.s16 q8, q8, q3
475 vqmovun.s16 d2, q1
476 vqmovun.s16 d3, q0
477 vqmovun.s16 d22, q11
478 vqmovun.s16 d23, q8
479 vdup.16 q0, d21[2] ; proload next 2 rows data
480 vdup.16 q8, d21[3]
481 vst1.64 {d2,d3}, [r0], r1
482 vst1.64 {d22,d23}, [r0], r1
483
484
485 vadd.s16 q1, q0, q2
486 vadd.s16 q0, q0, q3
487 vadd.s16 q11, q8, q2
488 vadd.s16 q8, q8, q3
489 vqmovun.s16 d2, q1
490 vqmovun.s16 d3, q0
491 vqmovun.s16 d22, q11
492 vqmovun.s16 d23, q8
493 vld1.8 {d18}, [r3]! ; preload 8 left into r12
494 vmovl.u8 q10, d18
495 vst1.64 {d2,d3}, [r0], r1
496 vst1.64 {d22,d23}, [r0], r1
497
498 subs r2, r2, #1
499 bgt loop_16x16_neon
500
501 bx lr
502 ENDP ; |vp9_tm_predictor_16x16_neon|
503
504 ;void vp9_tm_predictor_32x32_neon (uint8_t *dst, ptrdiff_t y_stride,
505 ; const uint8_t *above,
506 ; const uint8_t *left)
507 ; r0 uint8_t *dst
508 ; r1 ptrdiff_t y_stride
509 ; r2 const uint8_t *above
510 ; r3 const uint8_t *left
511
512 |vp9_tm_predictor_32x32_neon| PROC
513 ; Load ytop_left = above[-1];
514 sub r12, r2, #1
515 ldrb r12, [r12]
516 vdup.u8 q0, r12
517
518 ; Load above 32 pixels
519 vld1.8 {q1}, [r2]!
520 vld1.8 {q2}, [r2]
521
522 ; preload 8 left pixels
523 vld1.8 {d26}, [r3]!
524
525 ; Compute above - ytop_left
526 vsubl.u8 q8, d2, d0
527 vsubl.u8 q9, d3, d1
528 vsubl.u8 q10, d4, d0
529 vsubl.u8 q11, d5, d1
530
531 vmovl.u8 q3, d26
532
533 ; Load left row by row and compute left + (above - ytop_left)
534 ; Process 8 rows in each single loop and loop 4 times to process 32 rows.
535 mov r2, #4
536
537 loop_32x32_neon
538 ; Process two rows.
539 vdup.16 q0, d6[0]
540 vdup.16 q2, d6[1]
541 vadd.s16 q12, q0, q8
542 vadd.s16 q13, q0, q9
543 vadd.s16 q14, q0, q10
544 vadd.s16 q15, q0, q11
545 vqmovun.s16 d0, q12
546 vqmovun.s16 d1, q13
547 vadd.s16 q12, q2, q8
548 vadd.s16 q13, q2, q9
549 vqmovun.s16 d2, q14
550 vqmovun.s16 d3, q15
551 vadd.s16 q14, q2, q10
552 vadd.s16 q15, q2, q11
553 vst1.64 {d0-d3}, [r0], r1
554 vqmovun.s16 d24, q12
555 vqmovun.s16 d25, q13
556 vqmovun.s16 d26, q14
557 vqmovun.s16 d27, q15
558 vdup.16 q1, d6[2]
559 vdup.16 q2, d6[3]
560 vst1.64 {d24-d27}, [r0], r1
561
562 ; Process two rows.
563 vadd.s16 q12, q1, q8
564 vadd.s16 q13, q1, q9
565 vadd.s16 q14, q1, q10
566 vadd.s16 q15, q1, q11
567 vqmovun.s16 d0, q12
568 vqmovun.s16 d1, q13
569 vadd.s16 q12, q2, q8
570 vadd.s16 q13, q2, q9
571 vqmovun.s16 d2, q14
572 vqmovun.s16 d3, q15
573 vadd.s16 q14, q2, q10
574 vadd.s16 q15, q2, q11
575 vst1.64 {d0-d3}, [r0], r1
576 vqmovun.s16 d24, q12
577 vqmovun.s16 d25, q13
578 vqmovun.s16 d26, q14
579 vqmovun.s16 d27, q15
580 vdup.16 q0, d7[0]
581 vdup.16 q2, d7[1]
582 vst1.64 {d24-d27}, [r0], r1
583
584 ; Process two rows.
585 vadd.s16 q12, q0, q8
586 vadd.s16 q13, q0, q9
587 vadd.s16 q14, q0, q10
588 vadd.s16 q15, q0, q11
589 vqmovun.s16 d0, q12
590 vqmovun.s16 d1, q13
591 vadd.s16 q12, q2, q8
592 vadd.s16 q13, q2, q9
593 vqmovun.s16 d2, q14
594 vqmovun.s16 d3, q15
595 vadd.s16 q14, q2, q10
596 vadd.s16 q15, q2, q11
597 vst1.64 {d0-d3}, [r0], r1
598 vqmovun.s16 d24, q12
599 vqmovun.s16 d25, q13
600 vqmovun.s16 d26, q14
601 vqmovun.s16 d27, q15
602 vdup.16 q0, d7[2]
603 vdup.16 q2, d7[3]
604 vst1.64 {d24-d27}, [r0], r1
605
606 ; Process two rows.
607 vadd.s16 q12, q0, q8
608 vadd.s16 q13, q0, q9
609 vadd.s16 q14, q0, q10
610 vadd.s16 q15, q0, q11
611 vqmovun.s16 d0, q12
612 vqmovun.s16 d1, q13
613 vadd.s16 q12, q2, q8
614 vadd.s16 q13, q2, q9
615 vqmovun.s16 d2, q14
616 vqmovun.s16 d3, q15
617 vadd.s16 q14, q2, q10
618 vadd.s16 q15, q2, q11
619 vst1.64 {d0-d3}, [r0], r1
620 vqmovun.s16 d24, q12
621 vqmovun.s16 d25, q13
622 vld1.8 {d0}, [r3]! ; preload 8 left pixels
623 vqmovun.s16 d26, q14
624 vqmovun.s16 d27, q15
625 vmovl.u8 q3, d0
626 vst1.64 {d24-d27}, [r0], r1
627
628 subs r2, r2, #1
629 bgt loop_32x32_neon
630
631 bx lr
632 ENDP ; |vp9_tm_predictor_32x32_neon|
633
634 END
OLDNEW
« no previous file with comments | « source/libvpx/vp9/common/arm/neon/vp9_loopfilter_neon.c ('k') | source/libvpx/vp9/common/arm/neon/vp9_reconintra_neon.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698