diff options
author | Vignesh Venkatasubramanian <vigneshv@google.com> | 2023-06-12 23:55:07 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-06-12 23:55:07 +0000 |
commit | 1f9deebc6ecf78b637dff50d62772b48332ea5ea (patch) | |
tree | 303e8eabb435a80ebec36a19c23ca85744d58fb5 /files/source/scale_neon64.cc | |
parent | 435db9f11b09187e0d60683813a28d07cc13166b (diff) | |
parent | 8e521e2ea589b4cafb788330f83037a0413f200a (diff) | |
download | libyuv-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.cc | 39 |
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, |