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 2565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2576 "bgt 1b \n" | 2576 "bgt 1b \n" |
2577 : "+r"(src_argb), // %0 | 2577 : "+r"(src_argb), // %0 |
2578 "+r"(dst_argb), // %1 | 2578 "+r"(dst_argb), // %1 |
2579 "+r"(width) // %2 | 2579 "+r"(width) // %2 |
2580 : "r"(matrix_argb) // %3 | 2580 : "r"(matrix_argb) // %3 |
2581 : "cc", "memory", "q0", "q1", "q2", "q4", "q5", "q6", "q7", "q8", "q9", | 2581 : "cc", "memory", "q0", "q1", "q2", "q4", "q5", "q6", "q7", "q8", "q9", |
2582 "q10", "q11", "q12", "q13", "q14", "q15" | 2582 "q10", "q11", "q12", "q13", "q14", "q15" |
2583 ); | 2583 ); |
2584 } | 2584 } |
2585 | 2585 |
2586 // TODO(fbarchard): fix vqshrun in ARGBMultiplyRow_NEON and reenable. | |
2587 #ifdef HAS_ARGBMULTIPLYROW_NEON | |
2588 // Multiply 2 rows of ARGB pixels together, 8 pixels at a time. | 2586 // Multiply 2 rows of ARGB pixels together, 8 pixels at a time. |
2589 void ARGBMultiplyRow_NEON(const uint8* src_argb0, const uint8* src_argb1, | 2587 void ARGBMultiplyRow_NEON(const uint8* src_argb0, const uint8* src_argb1, |
2590 uint8* dst_argb, int width) { | 2588 uint8* dst_argb, int width) { |
2591 asm volatile ( | 2589 asm volatile ( |
2592 // 8 pixel loop. | 2590 // 8 pixel loop. |
2593 "1: \n" | 2591 "1: \n" |
2594 MEMACCESS(0) | 2592 MEMACCESS(0) |
2595 "vld4.8 {d0, d2, d4, d6}, [%0]! \n" // load 8 ARGB pixels. | 2593 "vld4.8 {d0, d2, d4, d6}, [%0]! \n" // load 8 ARGB pixels. |
2596 MEMACCESS(1) | 2594 MEMACCESS(1) |
2597 "vld4.8 {d1, d3, d5, d7}, [%1]! \n" // load 8 more ARGB pixels. | 2595 "vld4.8 {d1, d3, d5, d7}, [%1]! \n" // load 8 more ARGB pixels. |
(...skipping 11 matching lines...) Expand all Loading... |
2609 "bgt 1b \n" | 2607 "bgt 1b \n" |
2610 | 2608 |
2611 : "+r"(src_argb0), // %0 | 2609 : "+r"(src_argb0), // %0 |
2612 "+r"(src_argb1), // %1 | 2610 "+r"(src_argb1), // %1 |
2613 "+r"(dst_argb), // %2 | 2611 "+r"(dst_argb), // %2 |
2614 "+r"(width) // %3 | 2612 "+r"(width) // %3 |
2615 : | 2613 : |
2616 : "cc", "memory", "q0", "q1", "q2", "q3" | 2614 : "cc", "memory", "q0", "q1", "q2", "q3" |
2617 ); | 2615 ); |
2618 } | 2616 } |
2619 #endif // HAS_ARGBMULTIPLYROW_NEON | |
2620 | 2617 |
2621 // Add 2 rows of ARGB pixels together, 8 pixels at a time. | 2618 // Add 2 rows of ARGB pixels together, 8 pixels at a time. |
2622 void ARGBAddRow_NEON(const uint8* src_argb0, const uint8* src_argb1, | 2619 void ARGBAddRow_NEON(const uint8* src_argb0, const uint8* src_argb1, |
2623 uint8* dst_argb, int width) { | 2620 uint8* dst_argb, int width) { |
2624 asm volatile ( | 2621 asm volatile ( |
2625 // 8 pixel loop. | 2622 // 8 pixel loop. |
2626 "1: \n" | 2623 "1: \n" |
2627 MEMACCESS(0) | 2624 MEMACCESS(0) |
2628 "vld4.8 {d0, d1, d2, d3}, [%0]! \n" // load 8 ARGB pixels. | 2625 "vld4.8 {d0, d1, d2, d3}, [%0]! \n" // load 8 ARGB pixels. |
2629 MEMACCESS(1) | 2626 MEMACCESS(1) |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2837 "r"(6) // %5 | 2834 "r"(6) // %5 |
2838 : "cc", "memory", "q0", "q1" // Clobber List | 2835 : "cc", "memory", "q0", "q1" // Clobber List |
2839 ); | 2836 ); |
2840 } | 2837 } |
2841 #endif // defined(__ARM_NEON__) && !defined(__aarch64__) | 2838 #endif // defined(__ARM_NEON__) && !defined(__aarch64__) |
2842 | 2839 |
2843 #ifdef __cplusplus | 2840 #ifdef __cplusplus |
2844 } // extern "C" | 2841 } // extern "C" |
2845 } // namespace libyuv | 2842 } // namespace libyuv |
2846 #endif | 2843 #endif |
OLD | NEW |