1 ; 2 ; Copyright (c) 2010 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 12 EXPORT |vp8_recon16x16mb_neon| 13 ARM 14 REQUIRE8 15 PRESERVE8 16 17 AREA ||.text||, CODE, READONLY, ALIGN=2 18 19 ; r0 unsigned char *pred_ptr, 20 ; r1 short *diff_ptr, 21 ; r2 unsigned char *dst_ptr, 22 ; r3 int ystride, 23 ; stack unsigned char *udst_ptr, 24 ; stack unsigned char *vdst_ptr 25 26 |vp8_recon16x16mb_neon| PROC 27 mov r12, #4 ;loop counter for Y loop 28 29 recon16x16mb_loop_y 30 vld1.u8 {q12, q13}, [r0]! ;load data from pred_ptr 31 vld1.16 {q8, q9}, [r1]! ;load data from diff_ptr 32 vld1.u8 {q14, q15}, [r0]! 33 vld1.16 {q10, q11}, [r1]! 34 35 vmovl.u8 q0, d24 ;modify Pred data from 8 bits to 16 bits 36 vmovl.u8 q1, d25 37 vmovl.u8 q2, d26 38 vmovl.u8 q3, d27 39 vmovl.u8 q4, d28 40 vmovl.u8 q5, d29 41 vmovl.u8 q6, d30 42 vld1.16 {q12, q13}, [r1]! 43 vmovl.u8 q7, d31 44 vld1.16 {q14, q15}, [r1]! 45 46 pld [r0] 47 pld [r1] 48 pld [r1, #64] 49 50 vadd.s16 q0, q0, q8 ;add Diff data and Pred data together 51 vadd.s16 q1, q1, q9 52 vadd.s16 q2, q2, q10 53 vadd.s16 q3, q3, q11 54 vadd.s16 q4, q4, q12 55 vadd.s16 q5, q5, q13 56 vadd.s16 q6, q6, q14 57 vadd.s16 q7, q7, q15 58 59 vqmovun.s16 d0, q0 ;CLAMP() saturation 60 vqmovun.s16 d1, q1 61 vqmovun.s16 d2, q2 62 vqmovun.s16 d3, q3 63 vqmovun.s16 d4, q4 64 vqmovun.s16 d5, q5 65 vst1.u8 {q0}, [r2], r3 ;store result 66 vqmovun.s16 d6, q6 67 vst1.u8 {q1}, [r2], r3 68 vqmovun.s16 d7, q7 69 vst1.u8 {q2}, [r2], r3 70 subs r12, r12, #1 71 72 moveq r12, #2 ;loop counter for UV loop 73 74 vst1.u8 {q3}, [r2], r3 75 bne recon16x16mb_loop_y 76 77 mov r3, r3, lsr #1 ;uv_stride = ystride>>1 78 ldr r2, [sp] ;load upred_ptr 79 80 recon16x16mb_loop_uv 81 vld1.u8 {q12, q13}, [r0]! ;load data from pred_ptr 82 vld1.16 {q8, q9}, [r1]! ;load data from diff_ptr 83 vld1.u8 {q14, q15}, [r0]! 84 vld1.16 {q10, q11}, [r1]! 85 86 vmovl.u8 q0, d24 ;modify Pred data from 8 bits to 16 bits 87 vmovl.u8 q1, d25 88 vmovl.u8 q2, d26 89 vmovl.u8 q3, d27 90 vmovl.u8 q4, d28 91 vmovl.u8 q5, d29 92 vmovl.u8 q6, d30 93 vld1.16 {q12, q13}, [r1]! 94 vmovl.u8 q7, d31 95 vld1.16 {q14, q15}, [r1]! 96 97 vadd.s16 q0, q0, q8 ;add Diff data and Pred data together 98 vadd.s16 q1, q1, q9 99 vadd.s16 q2, q2, q10 100 vadd.s16 q3, q3, q11 101 vadd.s16 q4, q4, q12 102 vadd.s16 q5, q5, q13 103 vadd.s16 q6, q6, q14 104 105 vqmovun.s16 d0, q0 ;CLAMP() saturation 106 vadd.s16 q7, q7, q15 107 vqmovun.s16 d1, q1 108 vqmovun.s16 d2, q2 109 vqmovun.s16 d3, q3 110 vst1.u8 {d0}, [r2], r3 ;store result 111 vqmovun.s16 d4, q4 112 vst1.u8 {d1}, [r2], r3 113 vqmovun.s16 d5, q5 114 vst1.u8 {d2}, [r2], r3 115 vqmovun.s16 d6, q6 116 vst1.u8 {d3}, [r2], r3 117 vqmovun.s16 d7, q7 118 vst1.u8 {d4}, [r2], r3 119 subs r12, r12, #1 120 121 vst1.u8 {d5}, [r2], r3 122 vst1.u8 {d6}, [r2], r3 123 vst1.u8 {d7}, [r2], r3 124 125 ldrne r2, [sp, #4] ;load vpred_ptr 126 bne recon16x16mb_loop_uv 127 128 bx lr 129 130 ENDP 131 END 132