Define RDCOST only once
[libvpx.git] / vp8 / encoder / arm / neon / sad16_neon.asm
blobd7c590e15a21fa33a70b78b684e1252fd447c937
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_sad16x16_neon|
13 EXPORT |vp8_sad16x8_neon|
15 ARM
16 REQUIRE8
17 PRESERVE8
19 AREA ||.text||, CODE, READONLY, ALIGN=2
21 ; r0 unsigned char *src_ptr
22 ; r1 int src_stride
23 ; r2 unsigned char *ref_ptr
24 ; r3 int ref_stride
25 |vp8_sad16x16_neon| PROC
27 vld1.8 {q0}, [r0], r1
28 vld1.8 {q4}, [r2], r3
30 vld1.8 {q1}, [r0], r1
31 vld1.8 {q5}, [r2], r3
33 vabdl.u8 q12, d0, d8
34 vabdl.u8 q13, d1, d9
36 vld1.8 {q2}, [r0], r1
37 vld1.8 {q6}, [r2], r3
39 vabal.u8 q12, d2, d10
40 vabal.u8 q13, d3, d11
42 vld1.8 {q3}, [r0], r1
43 vld1.8 {q7}, [r2], r3
45 vabal.u8 q12, d4, d12
46 vabal.u8 q13, d5, d13
49 vld1.8 {q0}, [r0], r1
50 vld1.8 {q4}, [r2], r3
52 vabal.u8 q12, d6, d14
53 vabal.u8 q13, d7, d15
55 vld1.8 {q1}, [r0], r1
56 vld1.8 {q5}, [r2], r3
58 vabal.u8 q12, d0, d8
59 vabal.u8 q13, d1, d9
61 vld1.8 {q2}, [r0], r1
62 vld1.8 {q6}, [r2], r3
64 vabal.u8 q12, d2, d10
65 vabal.u8 q13, d3, d11
67 vld1.8 {q3}, [r0], r1
68 vld1.8 {q7}, [r2], r3
70 vabal.u8 q12, d4, d12
71 vabal.u8 q13, d5, d13
74 vld1.8 {q0}, [r0], r1
75 vld1.8 {q4}, [r2], r3
77 vabal.u8 q12, d6, d14
78 vabal.u8 q13, d7, d15
80 vld1.8 {q1}, [r0], r1
81 vld1.8 {q5}, [r2], r3
83 vabal.u8 q12, d0, d8
84 vabal.u8 q13, d1, d9
86 vld1.8 {q2}, [r0], r1
87 vld1.8 {q6}, [r2], r3
89 vabal.u8 q12, d2, d10
90 vabal.u8 q13, d3, d11
92 vld1.8 {q3}, [r0], r1
93 vld1.8 {q7}, [r2], r3
95 vabal.u8 q12, d4, d12
96 vabal.u8 q13, d5, d13
99 vld1.8 {q0}, [r0], r1
100 vld1.8 {q4}, [r2], r3
102 vabal.u8 q12, d6, d14
103 vabal.u8 q13, d7, d15
105 vld1.8 {q1}, [r0], r1
106 vld1.8 {q5}, [r2], r3
108 vabal.u8 q12, d0, d8
109 vabal.u8 q13, d1, d9
111 vld1.8 {q2}, [r0], r1
112 vld1.8 {q6}, [r2], r3
114 vabal.u8 q12, d2, d10
115 vabal.u8 q13, d3, d11
117 vld1.8 {q3}, [r0]
118 vld1.8 {q7}, [r2]
120 vabal.u8 q12, d4, d12
121 vabal.u8 q13, d5, d13
123 vabal.u8 q12, d6, d14
124 vabal.u8 q13, d7, d15
126 vadd.u16 q0, q12, q13
128 vpaddl.u16 q1, q0
129 vpaddl.u32 q0, q1
131 vadd.u32 d0, d0, d1
133 vmov.32 r0, d0[0]
135 bx lr
137 ENDP
139 ;==============================
140 ;unsigned int vp8_sad16x8_c(
141 ; unsigned char *src_ptr,
142 ; int src_stride,
143 ; unsigned char *ref_ptr,
144 ; int ref_stride)
145 |vp8_sad16x8_neon| PROC
146 vld1.8 {q0}, [r0], r1
147 vld1.8 {q4}, [r2], r3
149 vld1.8 {q1}, [r0], r1
150 vld1.8 {q5}, [r2], r3
152 vabdl.u8 q12, d0, d8
153 vabdl.u8 q13, d1, d9
155 vld1.8 {q2}, [r0], r1
156 vld1.8 {q6}, [r2], r3
158 vabal.u8 q12, d2, d10
159 vabal.u8 q13, d3, d11
161 vld1.8 {q3}, [r0], r1
162 vld1.8 {q7}, [r2], r3
164 vabal.u8 q12, d4, d12
165 vabal.u8 q13, d5, d13
167 vld1.8 {q0}, [r0], r1
168 vld1.8 {q4}, [r2], r3
170 vabal.u8 q12, d6, d14
171 vabal.u8 q13, d7, d15
173 vld1.8 {q1}, [r0], r1
174 vld1.8 {q5}, [r2], r3
176 vabal.u8 q12, d0, d8
177 vabal.u8 q13, d1, d9
179 vld1.8 {q2}, [r0], r1
180 vld1.8 {q6}, [r2], r3
182 vabal.u8 q12, d2, d10
183 vabal.u8 q13, d3, d11
185 vld1.8 {q3}, [r0], r1
186 vld1.8 {q7}, [r2], r3
188 vabal.u8 q12, d4, d12
189 vabal.u8 q13, d5, d13
191 vabal.u8 q12, d6, d14
192 vabal.u8 q13, d7, d15
194 vadd.u16 q0, q12, q13
196 vpaddl.u16 q1, q0
197 vpaddl.u32 q0, q1
199 vadd.u32 d0, d0, d1
201 vmov.32 r0, d0[0]
203 bx lr
205 ENDP