2 ; Copyright (c) 2010 The WebM project authors. All Rights Reserved.
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.
12 EXPORT |vp8_build_intra_predictors_mby_neon_func|
13 EXPORT |vp8_build_intra_predictors_mby_s_neon_func|
19 AREA ||.text||
, CODE
, READONLY
, ALIGN=2
20 ; r0 unsigned char *y_buffer
21 ; r1 unsigned char *ypred_ptr
27 |vp8_build_intra_predictors_mby_neon_func|
PROC
40 ldr r4
, [sp, #
24] ; Up
41 ldr r5
, [sp, #
28] ; Left
43 ; Default the DC average to 128
47 ; Zero out running sum
50 ; compute shift and jump
52 beq skip_dc_pred_up_left
54 ; Load above row, if it exists
69 ; Move back to interger registers
78 ; Load left row, if it exists
120 add r7
, r7
, #
3 ; Shift
123 add r12
, r12
, r5
, lsl r4
124 mov r5
, r12
, lsr r7
; expected_dc
148 ; Copy down above row
240 ; Compute yabove_row - ytop_left
267 vqadd.s16 q10
, q1
, q4
268 vqadd.s16 q11
, q1
, q5
270 vqadd.s16 q12
, q2
, q4
271 vqadd.s16 q13
, q2
, q5
273 vqadd.s16 q14
, q3
, q4
274 vqadd.s16 q15
, q3
, q5
276 vqshrun.s16 d0
, q8
, #
0
277 vqshrun.s16 d1
, q9
, #
0
279 vqshrun.s16 d2
, q10
, #
0
280 vqshrun.s16 d3
, q11
, #
0
282 vqshrun.s16 d4
, q12
, #
0
283 vqshrun.s16 d5
, q13
, #
0
285 vqshrun.s16 d6
, q14
, #
0
286 vqshrun.s16 d7
, q15
, #
0
294 bne case_tm_pred_loop
300 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
301 ; r0 unsigned char *y_buffer
302 ; r1 unsigned char *ypred_ptr
308 |vp8_build_intra_predictors_mby_s_neon_func|
PROC
311 mov r1
, r0
; unsigned char *ypred_ptr = x->dst.y_buffer; //x->Predictor;
323 ldr r4
, [sp, #
24] ; Up
324 ldr r5
, [sp, #
28] ; Left
326 ; Default the DC average to 128
330 ; Zero out running sum
333 ; compute shift and jump
335 beq skip_dc_pred_up_left_s
337 ; Load above row, if it exists
339 beq skip_dc_pred_up_s
352 ; Move back to interger registers
357 beq skip_dc_pred_left_s
361 ; Load left row, if it exists
403 add r7
, r7
, #
3 ; Shift
406 add r12
, r12
, r5
, lsl r4
407 mov r5
, r12
, lsr r7
; expected_dc
411 skip_dc_pred_up_left_s
412 vst1.u8
{q0}, [r1
], r2
413 vst1.u8
{q0}, [r1
], r2
414 vst1.u8
{q0}, [r1
], r2
415 vst1.u8
{q0}, [r1
], r2
416 vst1.u8
{q0}, [r1
], r2
417 vst1.u8
{q0}, [r1
], r2
418 vst1.u8
{q0}, [r1
], r2
419 vst1.u8
{q0}, [r1
], r2
420 vst1.u8
{q0}, [r1
], r2
421 vst1.u8
{q0}, [r1
], r2
422 vst1.u8
{q0}, [r1
], r2
423 vst1.u8
{q0}, [r1
], r2
424 vst1.u8
{q0}, [r1
], r2
425 vst1.u8
{q0}, [r1
], r2
426 vst1.u8
{q0}, [r1
], r2
427 vst1.u8
{q0}, [r1
], r2
431 ; Copy down above row
435 vst1.u8
{q0}, [r1
], r2
436 vst1.u8
{q0}, [r1
], r2
437 vst1.u8
{q0}, [r1
], r2
438 vst1.u8
{q0}, [r1
], r2
439 vst1.u8
{q0}, [r1
], r2
440 vst1.u8
{q0}, [r1
], r2
441 vst1.u8
{q0}, [r1
], r2
442 vst1.u8
{q0}, [r1
], r2
443 vst1.u8
{q0}, [r1
], r2
444 vst1.u8
{q0}, [r1
], r2
445 vst1.u8
{q0}, [r1
], r2
446 vst1.u8
{q0}, [r1
], r2
447 vst1.u8
{q0}, [r1
], r2
448 vst1.u8
{q0}, [r1
], r2
449 vst1.u8
{q0}, [r1
], r2
450 vst1.u8
{q0}, [r1
], r2
465 vst1.u8
{q0}, [r1
], r2
466 vst1.u8
{q1}, [r1
], r2
467 vst1.u8
{q2}, [r1
], r2
468 vst1.u8
{q3}, [r1
], r2
478 vst1.u8
{q0}, [r1
], r2
479 vst1.u8
{q1}, [r1
], r2
480 vst1.u8
{q2}, [r1
], r2
481 vst1.u8
{q3}, [r1
], r2
492 vst1.u8
{q0}, [r1
], r2
493 vst1.u8
{q1}, [r1
], r2
494 vst1.u8
{q2}, [r1
], r2
495 vst1.u8
{q3}, [r1
], r2
505 vst1.u8
{q0}, [r1
], r2
506 vst1.u8
{q1}, [r1
], r2
507 vst1.u8
{q2}, [r1
], r2
508 vst1.u8
{q3}, [r1
], r2
523 ; Compute yabove_row - ytop_left
550 vqadd.s16 q10
, q1
, q4
551 vqadd.s16 q11
, q1
, q5
553 vqadd.s16 q12
, q2
, q4
554 vqadd.s16 q13
, q2
, q5
556 vqadd.s16 q14
, q3
, q4
557 vqadd.s16 q15
, q3
, q5
559 vqshrun.s16 d0
, q8
, #
0
560 vqshrun.s16 d1
, q9
, #
0
562 vqshrun.s16 d2
, q10
, #
0
563 vqshrun.s16 d3
, q11
, #
0
565 vqshrun.s16 d4
, q12
, #
0
566 vqshrun.s16 d5
, q13
, #
0
568 vqshrun.s16 d6
, q14
, #
0
569 vqshrun.s16 d7
, q15
, #
0
571 vst1.u8
{q0}, [r1
], r2
572 vst1.u8
{q1}, [r1
], r2
573 vst1.u8
{q2}, [r1
], r2
574 vst1.u8
{q3}, [r1
], r2
577 bne case_tm_pred_loop_s