OLD | NEW |
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 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 "+r"(width) // %4 | 361 "+r"(width) // %4 |
362 : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 | 362 : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 |
363 [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 | 363 [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 |
364 [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), | 364 [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), |
365 [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) | 365 [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) |
366 : "cc", "memory", "q0", "q1", "q2", "q3", "q4", | 366 : "cc", "memory", "q0", "q1", "q2", "q3", "q4", |
367 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" | 367 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" |
368 ); | 368 ); |
369 } | 369 } |
370 | 370 |
371 void I422ToABGRRow_NEON(const uint8* src_y, | 371 void I422ToABGRMatrixRow_NEON(const uint8* src_y, |
372 const uint8* src_u, | 372 const uint8* src_u, |
373 const uint8* src_v, | 373 const uint8* src_v, |
374 uint8* dst_abgr, | 374 uint8* dst_abgr, |
375 int width) { | 375 struct YuvConstantsNEON* YuvConstants, |
| 376 int width) { |
376 asm volatile ( | 377 asm volatile ( |
377 YUV422TORGB_SETUP_REG | 378 YUV422TORGB_SETUP_REG |
378 "1: \n" | 379 "1: \n" |
379 READYUV422 | 380 READYUV422 |
380 YUV422TORGB | 381 YUV422TORGB |
381 "subs %4, %4, #8 \n" | 382 "subs %4, %4, #8 \n" |
382 "vswp.u8 d20, d22 \n" | 383 "vswp.u8 d20, d22 \n" |
383 "vmov.u8 d23, #255 \n" | 384 "vmov.u8 d23, #255 \n" |
384 MEMACCESS(3) | 385 MEMACCESS(3) |
385 "vst4.8 {d20, d21, d22, d23}, [%3]! \n" | 386 "vst4.8 {d20, d21, d22, d23}, [%3]! \n" |
386 "bgt 1b \n" | 387 "bgt 1b \n" |
387 : "+r"(src_y), // %0 | 388 : "+r"(src_y), // %0 |
388 "+r"(src_u), // %1 | 389 "+r"(src_u), // %1 |
389 "+r"(src_v), // %2 | 390 "+r"(src_v), // %2 |
390 "+r"(dst_abgr), // %3 | 391 "+r"(dst_abgr), // %3 |
391 "+r"(width) // %4 | 392 "+r"(width) // %4 |
392 : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 | 393 : [kUVToRB]"r"(&YuvConstants->kUVToRB), // %5 |
393 [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 | 394 [kUVToG]"r"(&YuvConstants->kUVToG), // %6 |
394 [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), | 395 [kUVBiasBGR]"r"(&YuvConstants->kUVBiasBGR), |
395 [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) | 396 [kYToRgb]"r"(&YuvConstants->kYToRgb) |
396 : "cc", "memory", "q0", "q1", "q2", "q3", "q4", | 397 : "cc", "memory", "q0", "q1", "q2", "q3", "q4", |
397 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" | 398 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" |
398 ); | 399 ); |
399 } | 400 } |
400 | 401 |
401 void I422ToRGBARow_NEON(const uint8* src_y, | 402 void I422ToRGBARow_NEON(const uint8* src_y, |
402 const uint8* src_u, | 403 const uint8* src_u, |
403 const uint8* src_v, | 404 const uint8* src_v, |
404 uint8* dst_rgba, | 405 uint8* dst_rgba, |
405 int width) { | 406 int width) { |
(...skipping 2673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3079 "r"(6) // %5 | 3080 "r"(6) // %5 |
3080 : "cc", "memory", "q0", "q1" // Clobber List | 3081 : "cc", "memory", "q0", "q1" // Clobber List |
3081 ); | 3082 ); |
3082 } | 3083 } |
3083 #endif // defined(__ARM_NEON__) && !defined(__aarch64__) | 3084 #endif // defined(__ARM_NEON__) && !defined(__aarch64__) |
3084 | 3085 |
3085 #ifdef __cplusplus | 3086 #ifdef __cplusplus |
3086 } // extern "C" | 3087 } // extern "C" |
3087 } // namespace libyuv | 3088 } // namespace libyuv |
3088 #endif | 3089 #endif |
OLD | NEW |