Index: source/row_neon64.cc |
diff --git a/source/row_neon64.cc b/source/row_neon64.cc |
index ee42af12e37f38eb96684c2fc5795f4a060b30f6..e5f2dc8f396a17a93c0c890c875770fbdec677a0 100644 |
--- a/source/row_neon64.cc |
+++ b/source/row_neon64.cc |
@@ -1399,6 +1399,25 @@ void ARGBToYRow_NEON(const uint8* src_argb, uint8* dst_y, int width) { |
} |
#endif // HAS_ARGBTOYROW_NEON |
+#ifdef HAS_ARGBEXTRACTALPHAROW_NEON |
+void ARGBExtractAlphaRow_NEON(const uint8* src_argb, uint8* dst_a, int width) { |
+ asm volatile ( |
+ "1: \n" |
+ MEMACCESS(0) |
+ "ld4 {v0.8b,v1.8b,v2.8b,v3.8b}, [%0], #32 \n" // load row 8 pixels |
+ "subs %w2, %w2, #8 \n" // 8 processed per loop |
+ MEMACCESS(1) |
+ "st1 {v3.8b}, [%1], #8 \n" // store 8 A's. |
+ "b.gt 1b \n" |
+ : "+r"(src_argb), // %0 |
+ "+r"(dst_a), // %1 |
+ "+r"(width) // %2 |
+ : |
+ : "cc", "memory", "v0", "v1", "v2", "v3" // Clobber List |
+ ); |
+} |
+#endif // HAS_ARGBEXTRACTALPHAROW_NEON |
+ |
#ifdef HAS_ARGBTOYJROW_NEON |
void ARGBToYJRow_NEON(const uint8* src_argb, uint8* dst_y, int width) { |
asm volatile ( |