• 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_sad16x16_neon|
13    EXPORT  |vp8_sad16x8_neon|
14
15    ARM
16    REQUIRE8
17    PRESERVE8
18
19    AREA ||.text||, CODE, READONLY, ALIGN=2
20
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
26;;
27    vld1.8          {q0}, [r0], r1
28    vld1.8          {q4}, [r2], r3
29
30    vld1.8          {q1}, [r0], r1
31    vld1.8          {q5}, [r2], r3
32
33    vabdl.u8        q12, d0, d8
34    vabdl.u8        q13, d1, d9
35
36    vld1.8          {q2}, [r0], r1
37    vld1.8          {q6}, [r2], r3
38
39    vabal.u8        q12, d2, d10
40    vabal.u8        q13, d3, d11
41
42    vld1.8          {q3}, [r0], r1
43    vld1.8          {q7}, [r2], r3
44
45    vabal.u8        q12, d4, d12
46    vabal.u8        q13, d5, d13
47
48;;
49    vld1.8          {q0}, [r0], r1
50    vld1.8          {q4}, [r2], r3
51
52    vabal.u8        q12, d6, d14
53    vabal.u8        q13, d7, d15
54
55    vld1.8          {q1}, [r0], r1
56    vld1.8          {q5}, [r2], r3
57
58    vabal.u8        q12, d0, d8
59    vabal.u8        q13, d1, d9
60
61    vld1.8          {q2}, [r0], r1
62    vld1.8          {q6}, [r2], r3
63
64    vabal.u8        q12, d2, d10
65    vabal.u8        q13, d3, d11
66
67    vld1.8          {q3}, [r0], r1
68    vld1.8          {q7}, [r2], r3
69
70    vabal.u8        q12, d4, d12
71    vabal.u8        q13, d5, d13
72
73;;
74    vld1.8          {q0}, [r0], r1
75    vld1.8          {q4}, [r2], r3
76
77    vabal.u8        q12, d6, d14
78    vabal.u8        q13, d7, d15
79
80    vld1.8          {q1}, [r0], r1
81    vld1.8          {q5}, [r2], r3
82
83    vabal.u8        q12, d0, d8
84    vabal.u8        q13, d1, d9
85
86    vld1.8          {q2}, [r0], r1
87    vld1.8          {q6}, [r2], r3
88
89    vabal.u8        q12, d2, d10
90    vabal.u8        q13, d3, d11
91
92    vld1.8          {q3}, [r0], r1
93    vld1.8          {q7}, [r2], r3
94
95    vabal.u8        q12, d4, d12
96    vabal.u8        q13, d5, d13
97
98;;
99    vld1.8          {q0}, [r0], r1
100    vld1.8          {q4}, [r2], r3
101
102    vabal.u8        q12, d6, d14
103    vabal.u8        q13, d7, d15
104
105    vld1.8          {q1}, [r0], r1
106    vld1.8          {q5}, [r2], r3
107
108    vabal.u8        q12, d0, d8
109    vabal.u8        q13, d1, d9
110
111    vld1.8          {q2}, [r0], r1
112    vld1.8          {q6}, [r2], r3
113
114    vabal.u8        q12, d2, d10
115    vabal.u8        q13, d3, d11
116
117    vld1.8          {q3}, [r0]
118    vld1.8          {q7}, [r2]
119
120    vabal.u8        q12, d4, d12
121    vabal.u8        q13, d5, d13
122
123    vabal.u8        q12, d6, d14
124    vabal.u8        q13, d7, d15
125
126    vadd.u16        q0, q12, q13
127
128    vpaddl.u16      q1, q0
129    vpaddl.u32      q0, q1
130
131    vadd.u32        d0, d0, d1
132
133    vmov.32         r0, d0[0]
134
135    bx              lr
136
137    ENDP
138
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
148
149    vld1.8          {q1}, [r0], r1
150    vld1.8          {q5}, [r2], r3
151
152    vabdl.u8        q12, d0, d8
153    vabdl.u8        q13, d1, d9
154
155    vld1.8          {q2}, [r0], r1
156    vld1.8          {q6}, [r2], r3
157
158    vabal.u8        q12, d2, d10
159    vabal.u8        q13, d3, d11
160
161    vld1.8          {q3}, [r0], r1
162    vld1.8          {q7}, [r2], r3
163
164    vabal.u8        q12, d4, d12
165    vabal.u8        q13, d5, d13
166
167    vld1.8          {q0}, [r0], r1
168    vld1.8          {q4}, [r2], r3
169
170    vabal.u8        q12, d6, d14
171    vabal.u8        q13, d7, d15
172
173    vld1.8          {q1}, [r0], r1
174    vld1.8          {q5}, [r2], r3
175
176    vabal.u8        q12, d0, d8
177    vabal.u8        q13, d1, d9
178
179    vld1.8          {q2}, [r0], r1
180    vld1.8          {q6}, [r2], r3
181
182    vabal.u8        q12, d2, d10
183    vabal.u8        q13, d3, d11
184
185    vld1.8          {q3}, [r0], r1
186    vld1.8          {q7}, [r2], r3
187
188    vabal.u8        q12, d4, d12
189    vabal.u8        q13, d5, d13
190
191    vabal.u8        q12, d6, d14
192    vabal.u8        q13, d7, d15
193
194    vadd.u16        q0, q12, q13
195
196    vpaddl.u16      q1, q0
197    vpaddl.u32      q0, q1
198
199    vadd.u32        d0, d0, d1
200
201    vmov.32         r0, d0[0]
202
203    bx              lr
204
205    ENDP
206
207    END
208