• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
29recon16x16mb_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
80recon16x16mb_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