Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(739)

Side by Side Diff: source/libvpx/third_party/libyuv/source/row_neon.cc

Issue 1302353004: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2011 The LibYuv Project Authors. All rights reserved. 2 * Copyright 2011 The LibYuv Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 // Read 8 UYVY 87 // Read 8 UYVY
88 #define READUYVY \ 88 #define READUYVY \
89 MEMACCESS(0) \ 89 MEMACCESS(0) \
90 "vld2.8 {d2, d3}, [%0]! \n" \ 90 "vld2.8 {d2, d3}, [%0]! \n" \
91 "vmov.u8 d0, d3 \n" \ 91 "vmov.u8 d0, d3 \n" \
92 "vmov.u8 d3, d2 \n" \ 92 "vmov.u8 d3, d2 \n" \
93 "vuzp.u8 d2, d3 \n" \ 93 "vuzp.u8 d2, d3 \n" \
94 "vtrn.u32 d2, d3 \n" 94 "vtrn.u32 d2, d3 \n"
95 95
96 #define YUV422TORGB_SETUP_REG \ 96 #define YUV422TORGB_SETUP_REG \
97 MEMACCESS([kUVToRB]) \
97 "vld1.8 {d24}, [%[kUVToRB]] \n" \ 98 "vld1.8 {d24}, [%[kUVToRB]] \n" \
99 MEMACCESS([kUVToG]) \
98 "vld1.8 {d25}, [%[kUVToG]] \n" \ 100 "vld1.8 {d25}, [%[kUVToG]] \n" \
101 MEMACCESS([kUVBiasBGR]) \
99 "vld1.16 {d26[], d27[]}, [%[kUVBiasBGR]]! \n" \ 102 "vld1.16 {d26[], d27[]}, [%[kUVBiasBGR]]! \n" \
103 MEMACCESS([kUVBiasBGR]) \
100 "vld1.16 {d8[], d9[]}, [%[kUVBiasBGR]]! \n" \ 104 "vld1.16 {d8[], d9[]}, [%[kUVBiasBGR]]! \n" \
105 MEMACCESS([kUVBiasBGR]) \
101 "vld1.16 {d28[], d29[]}, [%[kUVBiasBGR]] \n" \ 106 "vld1.16 {d28[], d29[]}, [%[kUVBiasBGR]] \n" \
107 MEMACCESS([kYToRgb]) \
102 "vld1.32 {d30[], d31[]}, [%[kYToRgb]] \n" 108 "vld1.32 {d30[], d31[]}, [%[kYToRgb]] \n"
103 109
104 #define YUV422TORGB \ 110 #define YUV422TORGB \
105 "vmull.u8 q8, d2, d24 \n" /* u/v B/R component */\ 111 "vmull.u8 q8, d2, d24 \n" /* u/v B/R component */\
106 "vmull.u8 q9, d2, d25 \n" /* u/v G component */\ 112 "vmull.u8 q9, d2, d25 \n" /* u/v G component */\
107 "vmovl.u8 q0, d0 \n" /* Y */\ 113 "vmovl.u8 q0, d0 \n" /* Y */\
108 "vmovl.s16 q10, d1 \n" \ 114 "vmovl.s16 q10, d1 \n" \
109 "vmovl.s16 q0, d0 \n" \ 115 "vmovl.s16 q0, d0 \n" \
110 "vmul.s32 q10, q10, q15 \n" \ 116 "vmul.s32 q10, q10, q15 \n" \
111 "vmul.s32 q0, q0, q15 \n" \ 117 "vmul.s32 q0, q0, q15 \n" \
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 "bgt 1b \n" 185 "bgt 1b \n"
180 : "+r"(src_y), // %0 186 : "+r"(src_y), // %0
181 "+r"(src_u), // %1 187 "+r"(src_u), // %1
182 "+r"(src_v), // %2 188 "+r"(src_v), // %2
183 "+r"(dst_argb), // %3 189 "+r"(dst_argb), // %3
184 "+r"(width) // %4 190 "+r"(width) // %4
185 : [kUVToRB]"r"(&kUVToRB), // %5 191 : [kUVToRB]"r"(&kUVToRB), // %5
186 [kUVToG]"r"(&kUVToG), // %6 192 [kUVToG]"r"(&kUVToG), // %6
187 [kUVBiasBGR]"r"(&kUVBiasBGR), 193 [kUVBiasBGR]"r"(&kUVBiasBGR),
188 [kYToRgb]"r"(&kYToRgb) 194 [kYToRgb]"r"(&kYToRgb)
189 : "cc", "memory", "q0", "q1", "q2", "q3", 195 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
190 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 196 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
191 ); 197 );
192 } 198 }
193 199
194 void I422ToARGBRow_NEON(const uint8* src_y, 200 void I422ToARGBRow_NEON(const uint8* src_y,
195 const uint8* src_u, 201 const uint8* src_u,
196 const uint8* src_v, 202 const uint8* src_v,
197 uint8* dst_argb, 203 uint8* dst_argb,
198 int width) { 204 int width) {
199 asm volatile ( 205 asm volatile (
200 YUV422TORGB_SETUP_REG 206 YUV422TORGB_SETUP_REG
201 ".p2align 2 \n" 207 ".p2align 2 \n"
202 "1: \n" 208 "1: \n"
203 READYUV422 209 READYUV422
204 YUV422TORGB 210 YUV422TORGB
205 "subs %4, %4, #8 \n" 211 "subs %4, %4, #8 \n"
206 "vmov.u8 d23, #255 \n" 212 "vmov.u8 d23, #255 \n"
207 MEMACCESS(3) 213 MEMACCESS(3)
208 "vst4.8 {d20, d21, d22, d23}, [%3]! \n" 214 "vst4.8 {d20, d21, d22, d23}, [%3]! \n"
209 "bgt 1b \n" 215 "bgt 1b \n"
210 : "+r"(src_y), // %0 216 : "+r"(src_y), // %0
211 "+r"(src_u), // %1 217 "+r"(src_u), // %1
212 "+r"(src_v), // %2 218 "+r"(src_v), // %2
213 "+r"(dst_argb), // %3 219 "+r"(dst_argb), // %3
214 "+r"(width) // %4 220 "+r"(width) // %4
215 : [kUVToRB]"r"(&kUVToRB), // %5 221 : [kUVToRB]"r"(&kUVToRB), // %5
216 [kUVToG]"r"(&kUVToG), // %6 222 [kUVToG]"r"(&kUVToG), // %6
217 [kUVBiasBGR]"r"(&kUVBiasBGR), 223 [kUVBiasBGR]"r"(&kUVBiasBGR),
218 [kYToRgb]"r"(&kYToRgb) 224 [kYToRgb]"r"(&kYToRgb)
219 : "cc", "memory", "q0", "q1", "q2", "q3", 225 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
220 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 226 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
221 ); 227 );
222 } 228 }
223 229
224 void I411ToARGBRow_NEON(const uint8* src_y, 230 void I411ToARGBRow_NEON(const uint8* src_y,
225 const uint8* src_u, 231 const uint8* src_u,
226 const uint8* src_v, 232 const uint8* src_v,
227 uint8* dst_argb, 233 uint8* dst_argb,
228 int width) { 234 int width) {
229 asm volatile ( 235 asm volatile (
230 YUV422TORGB_SETUP_REG 236 YUV422TORGB_SETUP_REG
231 ".p2align 2 \n" 237 ".p2align 2 \n"
232 "1: \n" 238 "1: \n"
233 READYUV411 239 READYUV411
234 YUV422TORGB 240 YUV422TORGB
235 "subs %4, %4, #8 \n" 241 "subs %4, %4, #8 \n"
236 "vmov.u8 d23, #255 \n" 242 "vmov.u8 d23, #255 \n"
237 MEMACCESS(3) 243 MEMACCESS(3)
238 "vst4.8 {d20, d21, d22, d23}, [%3]! \n" 244 "vst4.8 {d20, d21, d22, d23}, [%3]! \n"
239 "bgt 1b \n" 245 "bgt 1b \n"
240 : "+r"(src_y), // %0 246 : "+r"(src_y), // %0
241 "+r"(src_u), // %1 247 "+r"(src_u), // %1
242 "+r"(src_v), // %2 248 "+r"(src_v), // %2
243 "+r"(dst_argb), // %3 249 "+r"(dst_argb), // %3
244 "+r"(width) // %4 250 "+r"(width) // %4
245 : [kUVToRB]"r"(&kUVToRB), // %5 251 : [kUVToRB]"r"(&kUVToRB), // %5
246 [kUVToG]"r"(&kUVToG), // %6 252 [kUVToG]"r"(&kUVToG), // %6
247 [kUVBiasBGR]"r"(&kUVBiasBGR), 253 [kUVBiasBGR]"r"(&kUVBiasBGR),
248 [kYToRgb]"r"(&kYToRgb) 254 [kYToRgb]"r"(&kYToRgb)
249 : "cc", "memory", "q0", "q1", "q2", "q3", 255 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
250 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 256 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
251 ); 257 );
252 } 258 }
253 259
254 void I422ToBGRARow_NEON(const uint8* src_y, 260 void I422ToBGRARow_NEON(const uint8* src_y,
255 const uint8* src_u, 261 const uint8* src_u,
256 const uint8* src_v, 262 const uint8* src_v,
257 uint8* dst_bgra, 263 uint8* dst_bgra,
258 int width) { 264 int width) {
259 asm volatile ( 265 asm volatile (
(...skipping 10 matching lines...) Expand all
270 "bgt 1b \n" 276 "bgt 1b \n"
271 : "+r"(src_y), // %0 277 : "+r"(src_y), // %0
272 "+r"(src_u), // %1 278 "+r"(src_u), // %1
273 "+r"(src_v), // %2 279 "+r"(src_v), // %2
274 "+r"(dst_bgra), // %3 280 "+r"(dst_bgra), // %3
275 "+r"(width) // %4 281 "+r"(width) // %4
276 : [kUVToRB]"r"(&kUVToRB), // %5 282 : [kUVToRB]"r"(&kUVToRB), // %5
277 [kUVToG]"r"(&kUVToG), // %6 283 [kUVToG]"r"(&kUVToG), // %6
278 [kUVBiasBGR]"r"(&kUVBiasBGR), 284 [kUVBiasBGR]"r"(&kUVBiasBGR),
279 [kYToRgb]"r"(&kYToRgb) 285 [kYToRgb]"r"(&kYToRgb)
280 : "cc", "memory", "q0", "q1", "q2", "q3", 286 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
281 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 287 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
282 ); 288 );
283 } 289 }
284 290
285 void I422ToABGRRow_NEON(const uint8* src_y, 291 void I422ToABGRRow_NEON(const uint8* src_y,
286 const uint8* src_u, 292 const uint8* src_u,
287 const uint8* src_v, 293 const uint8* src_v,
288 uint8* dst_abgr, 294 uint8* dst_abgr,
289 int width) { 295 int width) {
290 asm volatile ( 296 asm volatile (
(...skipping 10 matching lines...) Expand all
301 "bgt 1b \n" 307 "bgt 1b \n"
302 : "+r"(src_y), // %0 308 : "+r"(src_y), // %0
303 "+r"(src_u), // %1 309 "+r"(src_u), // %1
304 "+r"(src_v), // %2 310 "+r"(src_v), // %2
305 "+r"(dst_abgr), // %3 311 "+r"(dst_abgr), // %3
306 "+r"(width) // %4 312 "+r"(width) // %4
307 : [kUVToRB]"r"(&kUVToRB), // %5 313 : [kUVToRB]"r"(&kUVToRB), // %5
308 [kUVToG]"r"(&kUVToG), // %6 314 [kUVToG]"r"(&kUVToG), // %6
309 [kUVBiasBGR]"r"(&kUVBiasBGR), 315 [kUVBiasBGR]"r"(&kUVBiasBGR),
310 [kYToRgb]"r"(&kYToRgb) 316 [kYToRgb]"r"(&kYToRgb)
311 : "cc", "memory", "q0", "q1", "q2", "q3", 317 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
312 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 318 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
313 ); 319 );
314 } 320 }
315 321
316 void I422ToRGBARow_NEON(const uint8* src_y, 322 void I422ToRGBARow_NEON(const uint8* src_y,
317 const uint8* src_u, 323 const uint8* src_u,
318 const uint8* src_v, 324 const uint8* src_v,
319 uint8* dst_rgba, 325 uint8* dst_rgba,
320 int width) { 326 int width) {
321 asm volatile ( 327 asm volatile (
322 YUV422TORGB_SETUP_REG 328 YUV422TORGB_SETUP_REG
323 ".p2align 2 \n" 329 ".p2align 2 \n"
324 "1: \n" 330 "1: \n"
325 READYUV422 331 READYUV422
326 YUV422TORGB 332 YUV422TORGB
327 "subs %4, %4, #8 \n" 333 "subs %4, %4, #8 \n"
328 "vmov.u8 d19, #255 \n" 334 "vmov.u8 d19, #255 \n"
329 MEMACCESS(3) 335 MEMACCESS(3)
330 "vst4.8 {d19, d20, d21, d22}, [%3]! \n" 336 "vst4.8 {d19, d20, d21, d22}, [%3]! \n"
331 "bgt 1b \n" 337 "bgt 1b \n"
332 : "+r"(src_y), // %0 338 : "+r"(src_y), // %0
333 "+r"(src_u), // %1 339 "+r"(src_u), // %1
334 "+r"(src_v), // %2 340 "+r"(src_v), // %2
335 "+r"(dst_rgba), // %3 341 "+r"(dst_rgba), // %3
336 "+r"(width) // %4 342 "+r"(width) // %4
337 : [kUVToRB]"r"(&kUVToRB), // %5 343 : [kUVToRB]"r"(&kUVToRB), // %5
338 [kUVToG]"r"(&kUVToG), // %6 344 [kUVToG]"r"(&kUVToG), // %6
339 [kUVBiasBGR]"r"(&kUVBiasBGR), 345 [kUVBiasBGR]"r"(&kUVBiasBGR),
340 [kYToRgb]"r"(&kYToRgb) 346 [kYToRgb]"r"(&kYToRgb)
341 : "cc", "memory", "q0", "q1", "q2", "q3", 347 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
342 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 348 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
343 ); 349 );
344 } 350 }
345 351
346 void I422ToRGB24Row_NEON(const uint8* src_y, 352 void I422ToRGB24Row_NEON(const uint8* src_y,
347 const uint8* src_u, 353 const uint8* src_u,
348 const uint8* src_v, 354 const uint8* src_v,
349 uint8* dst_rgb24, 355 uint8* dst_rgb24,
350 int width) { 356 int width) {
351 asm volatile ( 357 asm volatile (
352 YUV422TORGB_SETUP_REG 358 YUV422TORGB_SETUP_REG
353 ".p2align 2 \n" 359 ".p2align 2 \n"
354 "1: \n" 360 "1: \n"
355 READYUV422 361 READYUV422
356 YUV422TORGB 362 YUV422TORGB
357 "subs %4, %4, #8 \n" 363 "subs %4, %4, #8 \n"
358 MEMACCESS(3) 364 MEMACCESS(3)
359 "vst3.8 {d20, d21, d22}, [%3]! \n" 365 "vst3.8 {d20, d21, d22}, [%3]! \n"
360 "bgt 1b \n" 366 "bgt 1b \n"
361 : "+r"(src_y), // %0 367 : "+r"(src_y), // %0
362 "+r"(src_u), // %1 368 "+r"(src_u), // %1
363 "+r"(src_v), // %2 369 "+r"(src_v), // %2
364 "+r"(dst_rgb24), // %3 370 "+r"(dst_rgb24), // %3
365 "+r"(width) // %4 371 "+r"(width) // %4
366 : [kUVToRB]"r"(&kUVToRB), // %5 372 : [kUVToRB]"r"(&kUVToRB), // %5
367 [kUVToG]"r"(&kUVToG), // %6 373 [kUVToG]"r"(&kUVToG), // %6
368 [kUVBiasBGR]"r"(&kUVBiasBGR), 374 [kUVBiasBGR]"r"(&kUVBiasBGR),
369 [kYToRgb]"r"(&kYToRgb) 375 [kYToRgb]"r"(&kYToRgb)
370 : "cc", "memory", "q0", "q1", "q2", "q3", 376 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
371 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 377 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
372 ); 378 );
373 } 379 }
374 380
375 void I422ToRAWRow_NEON(const uint8* src_y, 381 void I422ToRAWRow_NEON(const uint8* src_y,
376 const uint8* src_u, 382 const uint8* src_u,
377 const uint8* src_v, 383 const uint8* src_v,
378 uint8* dst_raw, 384 uint8* dst_raw,
379 int width) { 385 int width) {
380 asm volatile ( 386 asm volatile (
381 YUV422TORGB_SETUP_REG 387 YUV422TORGB_SETUP_REG
382 ".p2align 2 \n" 388 ".p2align 2 \n"
383 "1: \n" 389 "1: \n"
384 READYUV422 390 READYUV422
385 YUV422TORGB 391 YUV422TORGB
386 "subs %4, %4, #8 \n" 392 "subs %4, %4, #8 \n"
387 "vswp.u8 d20, d22 \n" 393 "vswp.u8 d20, d22 \n"
388 MEMACCESS(3) 394 MEMACCESS(3)
389 "vst3.8 {d20, d21, d22}, [%3]! \n" 395 "vst3.8 {d20, d21, d22}, [%3]! \n"
390 "bgt 1b \n" 396 "bgt 1b \n"
391 : "+r"(src_y), // %0 397 : "+r"(src_y), // %0
392 "+r"(src_u), // %1 398 "+r"(src_u), // %1
393 "+r"(src_v), // %2 399 "+r"(src_v), // %2
394 "+r"(dst_raw), // %3 400 "+r"(dst_raw), // %3
395 "+r"(width) // %4 401 "+r"(width) // %4
396 : [kUVToRB]"r"(&kUVToRB), // %5 402 : [kUVToRB]"r"(&kUVToRB), // %5
397 [kUVToG]"r"(&kUVToG), // %6 403 [kUVToG]"r"(&kUVToG), // %6
398 [kUVBiasBGR]"r"(&kUVBiasBGR), 404 [kUVBiasBGR]"r"(&kUVBiasBGR),
399 [kYToRgb]"r"(&kYToRgb) 405 [kYToRgb]"r"(&kYToRgb)
400 : "cc", "memory", "q0", "q1", "q2", "q3", 406 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
401 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 407 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
402 ); 408 );
403 } 409 }
404 410
405 #define ARGBTORGB565 \ 411 #define ARGBTORGB565 \
406 "vshr.u8 d20, d20, #3 \n" /* B */ \ 412 "vshr.u8 d20, d20, #3 \n" /* B */ \
407 "vshr.u8 d21, d21, #2 \n" /* G */ \ 413 "vshr.u8 d21, d21, #2 \n" /* G */ \
408 "vshr.u8 d22, d22, #3 \n" /* R */ \ 414 "vshr.u8 d22, d22, #3 \n" /* R */ \
409 "vmovl.u8 q8, d20 \n" /* B */ \ 415 "vmovl.u8 q8, d20 \n" /* B */ \
410 "vmovl.u8 q9, d21 \n" /* G */ \ 416 "vmovl.u8 q9, d21 \n" /* G */ \
(...skipping 21 matching lines...) Expand all
432 "bgt 1b \n" 438 "bgt 1b \n"
433 : "+r"(src_y), // %0 439 : "+r"(src_y), // %0
434 "+r"(src_u), // %1 440 "+r"(src_u), // %1
435 "+r"(src_v), // %2 441 "+r"(src_v), // %2
436 "+r"(dst_rgb565), // %3 442 "+r"(dst_rgb565), // %3
437 "+r"(width) // %4 443 "+r"(width) // %4
438 : [kUVToRB]"r"(&kUVToRB), // %5 444 : [kUVToRB]"r"(&kUVToRB), // %5
439 [kUVToG]"r"(&kUVToG), // %6 445 [kUVToG]"r"(&kUVToG), // %6
440 [kUVBiasBGR]"r"(&kUVBiasBGR), 446 [kUVBiasBGR]"r"(&kUVBiasBGR),
441 [kYToRgb]"r"(&kYToRgb) 447 [kYToRgb]"r"(&kYToRgb)
442 : "cc", "memory", "q0", "q1", "q2", "q3", 448 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
443 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 449 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
444 ); 450 );
445 } 451 }
446 452
447 #define ARGBTOARGB1555 \ 453 #define ARGBTOARGB1555 \
448 "vshr.u8 q10, q10, #3 \n" /* B */ \ 454 "vshr.u8 q10, q10, #3 \n" /* B */ \
449 "vshr.u8 d22, d22, #3 \n" /* R */ \ 455 "vshr.u8 d22, d22, #3 \n" /* R */ \
450 "vshr.u8 d23, d23, #7 \n" /* A */ \ 456 "vshr.u8 d23, d23, #7 \n" /* A */ \
451 "vmovl.u8 q8, d20 \n" /* B */ \ 457 "vmovl.u8 q8, d20 \n" /* B */ \
452 "vmovl.u8 q9, d21 \n" /* G */ \ 458 "vmovl.u8 q9, d21 \n" /* G */ \
(...skipping 25 matching lines...) Expand all
478 "bgt 1b \n" 484 "bgt 1b \n"
479 : "+r"(src_y), // %0 485 : "+r"(src_y), // %0
480 "+r"(src_u), // %1 486 "+r"(src_u), // %1
481 "+r"(src_v), // %2 487 "+r"(src_v), // %2
482 "+r"(dst_argb1555), // %3 488 "+r"(dst_argb1555), // %3
483 "+r"(width) // %4 489 "+r"(width) // %4
484 : [kUVToRB]"r"(&kUVToRB), // %5 490 : [kUVToRB]"r"(&kUVToRB), // %5
485 [kUVToG]"r"(&kUVToG), // %6 491 [kUVToG]"r"(&kUVToG), // %6
486 [kUVBiasBGR]"r"(&kUVBiasBGR), 492 [kUVBiasBGR]"r"(&kUVBiasBGR),
487 [kYToRgb]"r"(&kYToRgb) 493 [kYToRgb]"r"(&kYToRgb)
488 : "cc", "memory", "q0", "q1", "q2", "q3", 494 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
489 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 495 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
490 ); 496 );
491 } 497 }
492 498
493 #define ARGBTOARGB4444 \ 499 #define ARGBTOARGB4444 \
494 "vshr.u8 d20, d20, #4 \n" /* B */ \ 500 "vshr.u8 d20, d20, #4 \n" /* B */ \
495 "vbic.32 d21, d21, d4 \n" /* G */ \ 501 "vbic.32 d21, d21, d4 \n" /* G */ \
496 "vshr.u8 d22, d22, #4 \n" /* R */ \ 502 "vshr.u8 d22, d22, #4 \n" /* R */ \
497 "vbic.32 d23, d23, d4 \n" /* A */ \ 503 "vbic.32 d23, d23, d4 \n" /* A */ \
498 "vorr d0, d20, d21 \n" /* BG */ \ 504 "vorr d0, d20, d21 \n" /* BG */ \
(...skipping 20 matching lines...) Expand all
519 "bgt 1b \n" 525 "bgt 1b \n"
520 : "+r"(src_y), // %0 526 : "+r"(src_y), // %0
521 "+r"(src_u), // %1 527 "+r"(src_u), // %1
522 "+r"(src_v), // %2 528 "+r"(src_v), // %2
523 "+r"(dst_argb4444), // %3 529 "+r"(dst_argb4444), // %3
524 "+r"(width) // %4 530 "+r"(width) // %4
525 : [kUVToRB]"r"(&kUVToRB), // %5 531 : [kUVToRB]"r"(&kUVToRB), // %5
526 [kUVToG]"r"(&kUVToG), // %6 532 [kUVToG]"r"(&kUVToG), // %6
527 [kUVBiasBGR]"r"(&kUVBiasBGR), 533 [kUVBiasBGR]"r"(&kUVBiasBGR),
528 [kYToRgb]"r"(&kYToRgb) 534 [kYToRgb]"r"(&kYToRgb)
529 : "cc", "memory", "q0", "q1", "q2", "q3", 535 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
530 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 536 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
531 ); 537 );
532 } 538 }
533 539
534 void YToARGBRow_NEON(const uint8* src_y, 540 void I400ToARGBRow_NEON(const uint8* src_y,
535 uint8* dst_argb, 541 uint8* dst_argb,
536 int width) { 542 int width) {
537 asm volatile ( 543 asm volatile (
538 YUV422TORGB_SETUP_REG 544 YUV422TORGB_SETUP_REG
539 ".p2align 2 \n" 545 ".p2align 2 \n"
540 "1: \n" 546 "1: \n"
541 READYUV400 547 READYUV400
542 YUV422TORGB 548 YUV422TORGB
543 "subs %2, %2, #8 \n" 549 "subs %2, %2, #8 \n"
544 "vmov.u8 d23, #255 \n" 550 "vmov.u8 d23, #255 \n"
545 MEMACCESS(1) 551 MEMACCESS(1)
546 "vst4.8 {d20, d21, d22, d23}, [%1]! \n" 552 "vst4.8 {d20, d21, d22, d23}, [%1]! \n"
547 "bgt 1b \n" 553 "bgt 1b \n"
548 : "+r"(src_y), // %0 554 : "+r"(src_y), // %0
549 "+r"(dst_argb), // %1 555 "+r"(dst_argb), // %1
550 "+r"(width) // %2 556 "+r"(width) // %2
551 : [kUVToRB]"r"(&kUVToRB), // %3 557 : [kUVToRB]"r"(&kUVToRB), // %3
552 [kUVToG]"r"(&kUVToG), // %4 558 [kUVToG]"r"(&kUVToG), // %4
553 [kUVBiasBGR]"r"(&kUVBiasBGR), 559 [kUVBiasBGR]"r"(&kUVBiasBGR),
554 [kYToRgb]"r"(&kYToRgb) 560 [kYToRgb]"r"(&kYToRgb)
555 : "cc", "memory", "q0", "q1", "q2", "q3", 561 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
556 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 562 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
557 ); 563 );
558 } 564 }
559 565
560 void I400ToARGBRow_NEON(const uint8* src_y, 566 void J400ToARGBRow_NEON(const uint8* src_y,
561 uint8* dst_argb, 567 uint8* dst_argb,
562 int width) { 568 int width) {
563 asm volatile ( 569 asm volatile (
570 "vmov.u8 d23, #255 \n"
564 ".p2align 2 \n" 571 ".p2align 2 \n"
565 "vmov.u8 d23, #255 \n"
566 "1: \n" 572 "1: \n"
567 MEMACCESS(0) 573 MEMACCESS(0)
568 "vld1.8 {d20}, [%0]! \n" 574 "vld1.8 {d20}, [%0]! \n"
569 "vmov d21, d20 \n" 575 "vmov d21, d20 \n"
570 "vmov d22, d20 \n" 576 "vmov d22, d20 \n"
571 "subs %2, %2, #8 \n" 577 "subs %2, %2, #8 \n"
572 MEMACCESS(1) 578 MEMACCESS(1)
573 "vst4.8 {d20, d21, d22, d23}, [%1]! \n" 579 "vst4.8 {d20, d21, d22, d23}, [%1]! \n"
574 "bgt 1b \n" 580 "bgt 1b \n"
575 : "+r"(src_y), // %0 581 : "+r"(src_y), // %0
(...skipping 20 matching lines...) Expand all
596 "vst4.8 {d20, d21, d22, d23}, [%2]! \n" 602 "vst4.8 {d20, d21, d22, d23}, [%2]! \n"
597 "bgt 1b \n" 603 "bgt 1b \n"
598 : "+r"(src_y), // %0 604 : "+r"(src_y), // %0
599 "+r"(src_uv), // %1 605 "+r"(src_uv), // %1
600 "+r"(dst_argb), // %2 606 "+r"(dst_argb), // %2
601 "+r"(width) // %3 607 "+r"(width) // %3
602 : [kUVToRB]"r"(&kUVToRB), // %4 608 : [kUVToRB]"r"(&kUVToRB), // %4
603 [kUVToG]"r"(&kUVToG), // %5 609 [kUVToG]"r"(&kUVToG), // %5
604 [kUVBiasBGR]"r"(&kUVBiasBGR), 610 [kUVBiasBGR]"r"(&kUVBiasBGR),
605 [kYToRgb]"r"(&kYToRgb) 611 [kYToRgb]"r"(&kYToRgb)
606 : "cc", "memory", "q0", "q1", "q2", "q3", 612 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
607 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 613 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
608 ); 614 );
609 } 615 }
610 616
611 void NV21ToARGBRow_NEON(const uint8* src_y, 617 void NV21ToARGBRow_NEON(const uint8* src_y,
612 const uint8* src_uv, 618 const uint8* src_uv,
613 uint8* dst_argb, 619 uint8* dst_argb,
614 int width) { 620 int width) {
615 asm volatile ( 621 asm volatile (
616 YUV422TORGB_SETUP_REG 622 YUV422TORGB_SETUP_REG
617 ".p2align 2 \n" 623 ".p2align 2 \n"
618 "1: \n" 624 "1: \n"
619 READNV21 625 READNV21
620 YUV422TORGB 626 YUV422TORGB
621 "subs %3, %3, #8 \n" 627 "subs %3, %3, #8 \n"
622 "vmov.u8 d23, #255 \n" 628 "vmov.u8 d23, #255 \n"
623 MEMACCESS(2) 629 MEMACCESS(2)
624 "vst4.8 {d20, d21, d22, d23}, [%2]! \n" 630 "vst4.8 {d20, d21, d22, d23}, [%2]! \n"
625 "bgt 1b \n" 631 "bgt 1b \n"
626 : "+r"(src_y), // %0 632 : "+r"(src_y), // %0
627 "+r"(src_uv), // %1 633 "+r"(src_uv), // %1
628 "+r"(dst_argb), // %2 634 "+r"(dst_argb), // %2
629 "+r"(width) // %3 635 "+r"(width) // %3
630 : [kUVToRB]"r"(&kUVToRB), // %4 636 : [kUVToRB]"r"(&kUVToRB), // %4
631 [kUVToG]"r"(&kUVToG), // %5 637 [kUVToG]"r"(&kUVToG), // %5
632 [kUVBiasBGR]"r"(&kUVBiasBGR), 638 [kUVBiasBGR]"r"(&kUVBiasBGR),
633 [kYToRgb]"r"(&kYToRgb) 639 [kYToRgb]"r"(&kYToRgb)
634 : "cc", "memory", "q0", "q1", "q2", "q3", 640 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
635 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 641 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
636 ); 642 );
637 } 643 }
638 644
639 void NV12ToRGB565Row_NEON(const uint8* src_y, 645 void NV12ToRGB565Row_NEON(const uint8* src_y,
640 const uint8* src_uv, 646 const uint8* src_uv,
641 uint8* dst_rgb565, 647 uint8* dst_rgb565,
642 int width) { 648 int width) {
643 asm volatile ( 649 asm volatile (
644 YUV422TORGB_SETUP_REG 650 YUV422TORGB_SETUP_REG
645 ".p2align 2 \n" 651 ".p2align 2 \n"
646 "1: \n" 652 "1: \n"
647 READNV12 653 READNV12
648 YUV422TORGB 654 YUV422TORGB
649 "subs %3, %3, #8 \n" 655 "subs %3, %3, #8 \n"
650 ARGBTORGB565 656 ARGBTORGB565
651 MEMACCESS(2) 657 MEMACCESS(2)
652 "vst1.8 {q0}, [%2]! \n" // store 8 pixels RGB565. 658 "vst1.8 {q0}, [%2]! \n" // store 8 pixels RGB565.
653 "bgt 1b \n" 659 "bgt 1b \n"
654 : "+r"(src_y), // %0 660 : "+r"(src_y), // %0
655 "+r"(src_uv), // %1 661 "+r"(src_uv), // %1
656 "+r"(dst_rgb565), // %2 662 "+r"(dst_rgb565), // %2
657 "+r"(width) // %3 663 "+r"(width) // %3
658 : [kUVToRB]"r"(&kUVToRB), // %4 664 : [kUVToRB]"r"(&kUVToRB), // %4
659 [kUVToG]"r"(&kUVToG), // %5 665 [kUVToG]"r"(&kUVToG), // %5
660 [kUVBiasBGR]"r"(&kUVBiasBGR), 666 [kUVBiasBGR]"r"(&kUVBiasBGR),
661 [kYToRgb]"r"(&kYToRgb) 667 [kYToRgb]"r"(&kYToRgb)
662 : "cc", "memory", "q0", "q1", "q2", "q3", 668 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
663 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 669 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
664 ); 670 );
665 } 671 }
666 672
667 void NV21ToRGB565Row_NEON(const uint8* src_y, 673 void NV21ToRGB565Row_NEON(const uint8* src_y,
668 const uint8* src_uv, 674 const uint8* src_uv,
669 uint8* dst_rgb565, 675 uint8* dst_rgb565,
670 int width) { 676 int width) {
671 asm volatile ( 677 asm volatile (
672 YUV422TORGB_SETUP_REG 678 YUV422TORGB_SETUP_REG
673 ".p2align 2 \n" 679 ".p2align 2 \n"
674 "1: \n" 680 "1: \n"
675 READNV21 681 READNV21
676 YUV422TORGB 682 YUV422TORGB
677 "subs %3, %3, #8 \n" 683 "subs %3, %3, #8 \n"
678 ARGBTORGB565 684 ARGBTORGB565
679 MEMACCESS(2) 685 MEMACCESS(2)
680 "vst1.8 {q0}, [%2]! \n" // store 8 pixels RGB565. 686 "vst1.8 {q0}, [%2]! \n" // store 8 pixels RGB565.
681 "bgt 1b \n" 687 "bgt 1b \n"
682 : "+r"(src_y), // %0 688 : "+r"(src_y), // %0
683 "+r"(src_uv), // %1 689 "+r"(src_uv), // %1
684 "+r"(dst_rgb565), // %2 690 "+r"(dst_rgb565), // %2
685 "+r"(width) // %3 691 "+r"(width) // %3
686 : [kUVToRB]"r"(&kUVToRB), // %4 692 : [kUVToRB]"r"(&kUVToRB), // %4
687 [kUVToG]"r"(&kUVToG), // %5 693 [kUVToG]"r"(&kUVToG), // %5
688 [kUVBiasBGR]"r"(&kUVBiasBGR), 694 [kUVBiasBGR]"r"(&kUVBiasBGR),
689 [kYToRgb]"r"(&kYToRgb) 695 [kYToRgb]"r"(&kYToRgb)
690 : "cc", "memory", "q0", "q1", "q2", "q3", 696 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
691 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 697 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
692 ); 698 );
693 } 699 }
694 700
695 void YUY2ToARGBRow_NEON(const uint8* src_yuy2, 701 void YUY2ToARGBRow_NEON(const uint8* src_yuy2,
696 uint8* dst_argb, 702 uint8* dst_argb,
697 int width) { 703 int width) {
698 asm volatile ( 704 asm volatile (
699 YUV422TORGB_SETUP_REG 705 YUV422TORGB_SETUP_REG
700 ".p2align 2 \n" 706 ".p2align 2 \n"
701 "1: \n" 707 "1: \n"
702 READYUY2 708 READYUY2
703 YUV422TORGB 709 YUV422TORGB
704 "subs %2, %2, #8 \n" 710 "subs %2, %2, #8 \n"
705 "vmov.u8 d23, #255 \n" 711 "vmov.u8 d23, #255 \n"
706 MEMACCESS(1) 712 MEMACCESS(1)
707 "vst4.8 {d20, d21, d22, d23}, [%1]! \n" 713 "vst4.8 {d20, d21, d22, d23}, [%1]! \n"
708 "bgt 1b \n" 714 "bgt 1b \n"
709 : "+r"(src_yuy2), // %0 715 : "+r"(src_yuy2), // %0
710 "+r"(dst_argb), // %1 716 "+r"(dst_argb), // %1
711 "+r"(width) // %2 717 "+r"(width) // %2
712 : [kUVToRB]"r"(&kUVToRB), // %3 718 : [kUVToRB]"r"(&kUVToRB), // %3
713 [kUVToG]"r"(&kUVToG), // %4 719 [kUVToG]"r"(&kUVToG), // %4
714 [kUVBiasBGR]"r"(&kUVBiasBGR), 720 [kUVBiasBGR]"r"(&kUVBiasBGR),
715 [kYToRgb]"r"(&kYToRgb) 721 [kYToRgb]"r"(&kYToRgb)
716 : "cc", "memory", "q0", "q1", "q2", "q3", 722 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
717 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 723 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
718 ); 724 );
719 } 725 }
720 726
721 void UYVYToARGBRow_NEON(const uint8* src_uyvy, 727 void UYVYToARGBRow_NEON(const uint8* src_uyvy,
722 uint8* dst_argb, 728 uint8* dst_argb,
723 int width) { 729 int width) {
724 asm volatile ( 730 asm volatile (
725 YUV422TORGB_SETUP_REG 731 YUV422TORGB_SETUP_REG
726 ".p2align 2 \n" 732 ".p2align 2 \n"
727 "1: \n" 733 "1: \n"
728 READUYVY 734 READUYVY
729 YUV422TORGB 735 YUV422TORGB
730 "subs %2, %2, #8 \n" 736 "subs %2, %2, #8 \n"
731 "vmov.u8 d23, #255 \n" 737 "vmov.u8 d23, #255 \n"
732 MEMACCESS(1) 738 MEMACCESS(1)
733 "vst4.8 {d20, d21, d22, d23}, [%1]! \n" 739 "vst4.8 {d20, d21, d22, d23}, [%1]! \n"
734 "bgt 1b \n" 740 "bgt 1b \n"
735 : "+r"(src_uyvy), // %0 741 : "+r"(src_uyvy), // %0
736 "+r"(dst_argb), // %1 742 "+r"(dst_argb), // %1
737 "+r"(width) // %2 743 "+r"(width) // %2
738 : [kUVToRB]"r"(&kUVToRB), // %3 744 : [kUVToRB]"r"(&kUVToRB), // %3
739 [kUVToG]"r"(&kUVToG), // %4 745 [kUVToG]"r"(&kUVToG), // %4
740 [kUVBiasBGR]"r"(&kUVBiasBGR), 746 [kUVBiasBGR]"r"(&kUVBiasBGR),
741 [kYToRgb]"r"(&kYToRgb) 747 [kYToRgb]"r"(&kYToRgb)
742 : "cc", "memory", "q0", "q1", "q2", "q3", 748 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
743 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 749 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
744 ); 750 );
745 } 751 }
746 752
747 // Reads 16 pairs of UV and write even values to dst_u and odd to dst_v. 753 // Reads 16 pairs of UV and write even values to dst_u and odd to dst_v.
748 void SplitUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v, 754 void SplitUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
749 int width) { 755 int width) {
750 asm volatile ( 756 asm volatile (
751 ".p2align 2 \n" 757 ".p2align 2 \n"
752 "1: \n" 758 "1: \n"
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
1238 : "+r"(src_uyvy), // %0 1244 : "+r"(src_uyvy), // %0
1239 "+r"(stride_uyvy), // %1 1245 "+r"(stride_uyvy), // %1
1240 "+r"(dst_u), // %2 1246 "+r"(dst_u), // %2
1241 "+r"(dst_v), // %3 1247 "+r"(dst_v), // %3
1242 "+r"(pix) // %4 1248 "+r"(pix) // %4
1243 : 1249 :
1244 : "cc", "memory", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7" // Clobber L ist 1250 : "cc", "memory", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7" // Clobber L ist
1245 ); 1251 );
1246 } 1252 }
1247 1253
1248 // Select G channels from ARGB. e.g. GGGGGGGG
1249 void ARGBToBayerGGRow_NEON(const uint8* src_argb, uint8* dst_bayer,
1250 uint32 /*selector*/, int pix) {
1251 asm volatile (
1252 "1: \n"
1253 MEMACCESS(0)
1254 "vld4.8 {d0, d1, d2, d3}, [%0]! \n" // load row 8 pixels.
1255 "subs %2, %2, #8 \n" // 8 processed per loop
1256 MEMACCESS(1)
1257 "vst1.8 {d1}, [%1]! \n" // store 8 G's.
1258 "bgt 1b \n"
1259 : "+r"(src_argb), // %0
1260 "+r"(dst_bayer), // %1
1261 "+r"(pix) // %2
1262 :
1263 : "cc", "memory", "q0", "q1" // Clobber List
1264 );
1265 }
1266
1267 // For BGRAToARGB, ABGRToARGB, RGBAToARGB, and ARGBToRGBA. 1254 // For BGRAToARGB, ABGRToARGB, RGBAToARGB, and ARGBToRGBA.
1268 void ARGBShuffleRow_NEON(const uint8* src_argb, uint8* dst_argb, 1255 void ARGBShuffleRow_NEON(const uint8* src_argb, uint8* dst_argb,
1269 const uint8* shuffler, int pix) { 1256 const uint8* shuffler, int pix) {
1270 asm volatile ( 1257 asm volatile (
1271 MEMACCESS(3) 1258 MEMACCESS(3)
1272 "vld1.8 {q2}, [%3] \n" // shuffler 1259 "vld1.8 {q2}, [%3] \n" // shuffler
1273 "1: \n" 1260 "1: \n"
1274 MEMACCESS(0) 1261 MEMACCESS(0)
1275 "vld1.8 {q0}, [%0]! \n" // load 4 pixels. 1262 "vld1.8 {q0}, [%0]! \n" // load 4 pixels.
1276 "subs %2, %2, #4 \n" // 4 processed per loop 1263 "subs %2, %2, #4 \n" // 4 processed per loop
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1353 "vst1.8 {q0}, [%1]! \n" // store 8 pixels RGB565. 1340 "vst1.8 {q0}, [%1]! \n" // store 8 pixels RGB565.
1354 "bgt 1b \n" 1341 "bgt 1b \n"
1355 : "+r"(src_argb), // %0 1342 : "+r"(src_argb), // %0
1356 "+r"(dst_rgb565), // %1 1343 "+r"(dst_rgb565), // %1
1357 "+r"(pix) // %2 1344 "+r"(pix) // %2
1358 : 1345 :
1359 : "cc", "memory", "q0", "q8", "q9", "q10", "q11" 1346 : "cc", "memory", "q0", "q8", "q9", "q10", "q11"
1360 ); 1347 );
1361 } 1348 }
1362 1349
1350 void ARGBToRGB565DitherRow_NEON(const uint8* src_argb, uint8* dst_rgb,
1351 const uint32 dither4, int width) {
1352 asm volatile (
1353 ".p2align 2 \n"
1354 "vdup.32 d2, %2 \n" // dither4
1355 "1: \n"
1356 MEMACCESS(1)
1357 "vld4.8 {d20, d21, d22, d23}, [%1]! \n" // load 8 pixels of ARGB.
1358 "subs %3, %3, #8 \n" // 8 processed per loop.
1359 "vqadd.u8 d20, d20, d2 \n"
1360 "vqadd.u8 d21, d21, d2 \n"
1361 "vqadd.u8 d22, d22, d2 \n"
1362 ARGBTORGB565
1363 MEMACCESS(0)
1364 "vst1.8 {q0}, [%0]! \n" // store 8 pixels RGB565.
1365 "bgt 1b \n"
1366 : "+r"(dst_rgb) // %0
1367 : "r"(src_argb), // %1
1368 "r"(dither4), // %2
1369 "r"(width) // %3
1370 : "cc", "memory", "q0", "q1", "q8", "q9", "q10", "q11"
1371 );
1372 }
1373
1363 void ARGBToARGB1555Row_NEON(const uint8* src_argb, uint8* dst_argb1555, 1374 void ARGBToARGB1555Row_NEON(const uint8* src_argb, uint8* dst_argb1555,
1364 int pix) { 1375 int pix) {
1365 asm volatile ( 1376 asm volatile (
1366 ".p2align 2 \n" 1377 ".p2align 2 \n"
1367 "1: \n" 1378 "1: \n"
1368 MEMACCESS(0) 1379 MEMACCESS(0)
1369 "vld4.8 {d20, d21, d22, d23}, [%0]! \n" // load 8 pixels of ARGB. 1380 "vld4.8 {d20, d21, d22, d23}, [%0]! \n" // load 8 pixels of ARGB.
1370 "subs %2, %2, #8 \n" // 8 processed per loop. 1381 "subs %2, %2, #8 \n" // 8 processed per loop.
1371 ARGBTOARGB1555 1382 ARGBTOARGB1555
1372 MEMACCESS(1) 1383 MEMACCESS(1)
(...skipping 1691 matching lines...) Expand 10 before | Expand all | Expand 10 after
3064 "r"(6) // %5 3075 "r"(6) // %5
3065 : "cc", "memory", "q0", "q1" // Clobber List 3076 : "cc", "memory", "q0", "q1" // Clobber List
3066 ); 3077 );
3067 } 3078 }
3068 #endif // defined(__ARM_NEON__) && !defined(__aarch64__) 3079 #endif // defined(__ARM_NEON__) && !defined(__aarch64__)
3069 3080
3070 #ifdef __cplusplus 3081 #ifdef __cplusplus
3071 } // extern "C" 3082 } // extern "C"
3072 } // namespace libyuv 3083 } // namespace libyuv
3073 #endif 3084 #endif
OLDNEW
« no previous file with comments | « source/libvpx/third_party/libyuv/source/row_gcc.cc ('k') | source/libvpx/third_party/libyuv/source/row_neon64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698