aboutsummaryrefslogtreecommitdiff
path: root/files/source/scale_neon64.cc
diff options
context:
space:
mode:
authorVignesh Venkatasubramanian <vigneshv@google.com>2023-06-12 23:55:07 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-06-12 23:55:07 +0000
commit1f9deebc6ecf78b637dff50d62772b48332ea5ea (patch)
tree303e8eabb435a80ebec36a19c23ca85744d58fb5 /files/source/scale_neon64.cc
parent435db9f11b09187e0d60683813a28d07cc13166b (diff)
parent8e521e2ea589b4cafb788330f83037a0413f200a (diff)
downloadlibyuv-1f9deebc6ecf78b637dff50d62772b48332ea5ea.tar.gz
Merge "libyuv: Update to r1871 (2a6cb743)" am: 8e521e2ea5
Original change: https://android-review.googlesource.com/c/platform/external/libyuv/+/2622518 Change-Id: I677290d9641c9a7a343f79cf385e88af70ec589d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'files/source/scale_neon64.cc')
-rw-r--r--files/source/scale_neon64.cc39
1 files changed, 39 insertions, 0 deletions
diff --git a/files/source/scale_neon64.cc b/files/source/scale_neon64.cc
index 9f9636e6..ad06ee83 100644
--- a/files/source/scale_neon64.cc
+++ b/files/source/scale_neon64.cc
@@ -1568,6 +1568,45 @@ void ScaleRowUp2_16_NEON(const uint16_t* src_ptr,
);
}
+void ScaleUVRowDown2_NEON(const uint8_t* src_ptr,
+ ptrdiff_t src_stride,
+ uint8_t* dst,
+ int dst_width) {
+ (void)src_stride;
+ asm volatile(
+ "1: \n"
+ "ld2 {v0.8h,v1.8h}, [%0], #32 \n" // load 16 UV
+ "subs %w2, %w2, #8 \n" // 8 processed per loop.
+ "prfm pldl1keep, [%0, 448] \n" // prefetch 7 lines ahead
+ "st1 {v1.8h}, [%1], #16 \n" // store 8 UV
+ "b.gt 1b \n"
+ : "+r"(src_ptr), // %0
+ "+r"(dst), // %1
+ "+r"(dst_width) // %2
+ :
+ : "memory", "cc", "v0", "v1");
+}
+
+void ScaleUVRowDown2Linear_NEON(const uint8_t* src_ptr,
+ ptrdiff_t src_stride,
+ uint8_t* dst,
+ int dst_width) {
+ (void)src_stride;
+ asm volatile(
+ "1: \n"
+ "ld2 {v0.8h,v1.8h}, [%0], #32 \n" // load 16 UV
+ "subs %w2, %w2, #8 \n" // 8 processed per loop.
+ "urhadd v0.16b, v0.16b, v1.16b \n" // rounding half add
+ "prfm pldl1keep, [%0, 448] \n" // prefetch 7 lines ahead
+ "st1 {v0.8h}, [%1], #16 \n" // store 8 UV
+ "b.gt 1b \n"
+ : "+r"(src_ptr), // %0
+ "+r"(dst), // %1
+ "+r"(dst_width) // %2
+ :
+ : "memory", "cc", "v0", "v1");
+}
+
void ScaleUVRowDown2Box_NEON(const uint8_t* src_ptr,
ptrdiff_t src_stride,
uint8_t* dst,