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