arm: remove duplicate functions
[libvpx.git] / vp8 / common / arm / neon / recon16x16mb_neon.asm
blob3f1a30f481d0537553799562a746644039c39808
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_recon16x16mb_neon|
13 ARM
14 REQUIRE8
15 PRESERVE8
17 AREA ||.text||, CODE, READONLY, ALIGN=2
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
26 |vp8_recon16x16mb_neon| PROC
27 mov r12, #4 ;loop counter for Y loop
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]!
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]!
46 pld [r0]
47 pld [r1]
48 pld [r1, #64]
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
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
72 moveq r12, #2 ;loop counter for UV loop
74 vst1.u8 {q3}, [r2], r3
75 bne recon16x16mb_loop_y
77 mov r3, r3, lsr #1 ;uv_stride = ystride>>1
78 ldr r2, [sp] ;load upred_ptr
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]!
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]!
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
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
121 vst1.u8 {d5}, [r2], r3
122 vst1.u8 {d6}, [r2], r3
123 vst1.u8 {d7}, [r2], r3
125 ldrne r2, [sp, #4] ;load vpred_ptr
126 bne recon16x16mb_loop_uv
128 bx lr
130 ENDP