| Index: source/row_neon.cc
|
| diff --git a/source/row_neon.cc b/source/row_neon.cc
|
| index b7a3be01d54cf423005ef75190f838933658744f..24457d53d19ac945528c58c9d8871dcf0e5b11e7 100644
|
| --- a/source/row_neon.cc
|
| +++ b/source/row_neon.cc
|
| @@ -798,12 +798,30 @@ void RAWToARGBRow_NEON(const uint8* src_raw, uint8* dst_argb, int width) {
|
| "bgt 1b \n"
|
| : "+r"(src_raw), // %0
|
| "+r"(dst_argb), // %1
|
| - "+r"(width) // %2
|
| + "+r"(width) // %2
|
| :
|
| : "cc", "memory", "d1", "d2", "d3", "d4" // Clobber List
|
| );
|
| }
|
|
|
| +void RAWToRGB24Row_NEON(const uint8* src_raw, uint8* dst_rgb24, int width) {
|
| + asm volatile (
|
| + "1: \n"
|
| + MEMACCESS(0)
|
| + "vld3.8 {d1, d2, d3}, [%0]! \n" // load 8 pixels of RAW.
|
| + "subs %2, %2, #8 \n" // 8 processed per loop.
|
| + "vswp.u8 d1, d3 \n" // swap R, B
|
| + MEMACCESS(1)
|
| + "vst3.8 {d1, d2, d3}, [%1]! \n" // store 8 pixels of RGB24.
|
| + "bgt 1b \n"
|
| + : "+r"(src_raw), // %0
|
| + "+r"(dst_rgb24), // %1
|
| + "+r"(width) // %2
|
| + :
|
| + : "cc", "memory", "d1", "d2", "d3" // Clobber List
|
| + );
|
| +}
|
| +
|
| #define RGB565TOARGB \
|
| "vshrn.u16 d6, q0, #5 \n" /* G xxGGGGGG */ \
|
| "vuzp.u8 d0, d1 \n" /* d0 xxxBBBBB RRRRRxxx */ \
|
|
|