| 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 780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 791 "1: \n" | 791 "1: \n" |
| 792 MEMACCESS(0) | 792 MEMACCESS(0) |
| 793 "vld3.8 {d1, d2, d3}, [%0]! \n" // load 8 pixels of RAW. | 793 "vld3.8 {d1, d2, d3}, [%0]! \n" // load 8 pixels of RAW. |
| 794 "subs %2, %2, #8 \n" // 8 processed per loop. | 794 "subs %2, %2, #8 \n" // 8 processed per loop. |
| 795 "vswp.u8 d1, d3 \n" // swap R, B | 795 "vswp.u8 d1, d3 \n" // swap R, B |
| 796 MEMACCESS(1) | 796 MEMACCESS(1) |
| 797 "vst4.8 {d1, d2, d3, d4}, [%1]! \n" // store 8 pixels of ARGB. | 797 "vst4.8 {d1, d2, d3, d4}, [%1]! \n" // store 8 pixels of ARGB. |
| 798 "bgt 1b \n" | 798 "bgt 1b \n" |
| 799 : "+r"(src_raw), // %0 | 799 : "+r"(src_raw), // %0 |
| 800 "+r"(dst_argb), // %1 | 800 "+r"(dst_argb), // %1 |
| 801 "+r"(width) // %2 | 801 "+r"(width) // %2 |
| 802 : | 802 : |
| 803 : "cc", "memory", "d1", "d2", "d3", "d4" // Clobber List | 803 : "cc", "memory", "d1", "d2", "d3", "d4" // Clobber List |
| 804 ); | 804 ); |
| 805 } | 805 } |
| 806 | 806 |
| 807 void RAWToRGB24Row_NEON(const uint8* src_raw, uint8* dst_rgb24, int width) { |
| 808 asm volatile ( |
| 809 "1: \n" |
| 810 MEMACCESS(0) |
| 811 "vld3.8 {d1, d2, d3}, [%0]! \n" // load 8 pixels of RAW. |
| 812 "subs %2, %2, #8 \n" // 8 processed per loop. |
| 813 "vswp.u8 d1, d3 \n" // swap R, B |
| 814 MEMACCESS(1) |
| 815 "vst3.8 {d1, d2, d3}, [%1]! \n" // store 8 pixels of RGB24. |
| 816 "bgt 1b \n" |
| 817 : "+r"(src_raw), // %0 |
| 818 "+r"(dst_rgb24), // %1 |
| 819 "+r"(width) // %2 |
| 820 : |
| 821 : "cc", "memory", "d1", "d2", "d3" // Clobber List |
| 822 ); |
| 823 } |
| 824 |
| 807 #define RGB565TOARGB \ | 825 #define RGB565TOARGB \ |
| 808 "vshrn.u16 d6, q0, #5 \n" /* G xxGGGGGG */ \ | 826 "vshrn.u16 d6, q0, #5 \n" /* G xxGGGGGG */ \ |
| 809 "vuzp.u8 d0, d1 \n" /* d0 xxxBBBBB RRRRRxxx */ \ | 827 "vuzp.u8 d0, d1 \n" /* d0 xxxBBBBB RRRRRxxx */ \ |
| 810 "vshl.u8 d6, d6, #2 \n" /* G GGGGGG00 upper 6 */ \ | 828 "vshl.u8 d6, d6, #2 \n" /* G GGGGGG00 upper 6 */ \ |
| 811 "vshr.u8 d1, d1, #3 \n" /* R 000RRRRR lower 5 */ \ | 829 "vshr.u8 d1, d1, #3 \n" /* R 000RRRRR lower 5 */ \ |
| 812 "vshl.u8 q0, q0, #3 \n" /* B,R BBBBB000 upper 5 */ \ | 830 "vshl.u8 q0, q0, #3 \n" /* B,R BBBBB000 upper 5 */ \ |
| 813 "vshr.u8 q2, q0, #5 \n" /* B,R 00000BBB lower 3 */ \ | 831 "vshr.u8 q2, q0, #5 \n" /* B,R 00000BBB lower 3 */ \ |
| 814 "vorr.u8 d0, d0, d4 \n" /* B */ \ | 832 "vorr.u8 d0, d0, d4 \n" /* B */ \ |
| 815 "vshr.u8 d4, d6, #6 \n" /* G 000000GG lower 2 */ \ | 833 "vshr.u8 d4, d6, #6 \n" /* G 000000GG lower 2 */ \ |
| 816 "vorr.u8 d2, d1, d5 \n" /* R */ \ | 834 "vorr.u8 d2, d1, d5 \n" /* R */ \ |
| (...skipping 2042 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2859 "r"(6) // %5 | 2877 "r"(6) // %5 |
| 2860 : "cc", "memory", "q0", "q1" // Clobber List | 2878 : "cc", "memory", "q0", "q1" // Clobber List |
| 2861 ); | 2879 ); |
| 2862 } | 2880 } |
| 2863 #endif // defined(__ARM_NEON__) && !defined(__aarch64__) | 2881 #endif // defined(__ARM_NEON__) && !defined(__aarch64__) |
| 2864 | 2882 |
| 2865 #ifdef __cplusplus | 2883 #ifdef __cplusplus |
| 2866 } // extern "C" | 2884 } // extern "C" |
| 2867 } // namespace libyuv | 2885 } // namespace libyuv |
| 2868 #endif | 2886 #endif |
| OLD | NEW |