Frank Barchard 9c5d5c1e55 InterpolateRow_NEON/SVE2 and InterpolateRow_16_NEON/SVE2 use 2 registers
Replace rshrn2 with 2 8 byte registers and stp

All benchmarks run at 1280×720, 1000 iterations (taskset c0):

Function (1280x720 1000x)     | OldNEON | NewNEON | OldSVE2 | NewSVE2
-------------------------------+---------+---------+---------+--------
TestInterpolatePlane (8-bit)   |   76 ms |   66 ms |  125 ms |   34 ms
TestInterpolatePlane_16        |  195 ms |   66 ms |  195 ms |   64 ms
TestARGBInterpolate (50/50)    |  104 ms |  104 ms |  128 ms |   89 ms
ARGBInterpolate0_Opt (0%)      |  133 ms |  128 ms |  148 ms |  145 ms
ARGBInterpolate64_Opt (25%)    |  211 ms |  181 ms |  244 ms |  222 ms
ARGBInterpolate128_Opt (50%)   |  182 ms |  178 ms |  278 ms |  176 ms
ARGBInterpolate192_Opt (75%)   |  211 ms |  173 ms |  223 ms |  209 ms
ARGBInterpolate255_Opt (99%)   |  211 ms |  183 ms |  315 ms |  221 ms
──────

Function (1280x720 1000x)     | OldNEON | NewNEON | OldSVE2 | NewSVE2
-------------------------------+---------+---------+---------+--------
TestInterpolatePlane (8-bit)   |  164 ms |  124 ms |  119 ms |   50 ms
TestInterpolatePlane_16        |  211 ms |  129 ms |  138 ms |   75 ms
TestARGBInterpolate (50/50)    |  159 ms |  159 ms |  210 ms |  166 ms
ARGBInterpolate0_Opt (0%)      |   92 ms |   92 ms |  148 ms |  138 ms
ARGBInterpolate64_Opt (25%)    |  223 ms |  223 ms |  232 ms |  232 ms
ARGBInterpolate128_Opt (50%)   |  130 ms |  130 ms |  232 ms |  195 ms
ARGBInterpolate192_Opt (75%)   |  223 ms |  223 ms |  232 ms |  232 ms
ARGBInterpolate255_Opt (99%)   |  223 ms |  223 ms |  232 ms |  232 ms

Platform            | NEON   | SVE2   | Result
--------------------+--------+--------+---------------
MediaTek Cortex-C1  | 47 ms  | 34 ms  | SVE2 1.38x win
Qualcomm Oryon v3   | 87 ms  | 73 ms  | SVE2 1.19x win

Testing:
blaze test --config=android_arm64 //third_party/libyuv:libyuv_test --test_filter="*TestInterpolatePlane*"

Bug: None
Change-Id: I503ce5a1269da5e1c5950c6a2c5ce81ddf4aaca5
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8216829
Commit-Queue: Frank Barchard <fbarchard@google.com>
Reviewed-by: George Steed <george.steed@arm.com>
Reviewed-by: Wan-Teh Chang <wtc@google.com>
2026-08-08 12:59:08 -07:00
..
compare_common.cc clang-tidy applied 2021-04-01 21:42:47 +00:00
compare_gcc.cc ARGBToJ444 use 256 for fixed point scale UV 2025-02-27 13:04:15 -08:00
compare_neon64.cc BGRAToI420 use BgraConstants for a direct conversion using AVX512BW 2026-06-08 12:21:47 -07:00
compare_neon.cc Apply format with no code changes 2025-02-24 23:57:01 -08:00
compare_win.cc BGRAToI420 use BgraConstants for a direct conversion using AVX512BW 2026-06-08 12:21:47 -07:00
compare.cc Don't coalesce rows if width*height would overflow 2026-05-29 11:57:47 -07:00
convert_argb.cc I420ToRAW and I420ToRGB24 1 pass AVX2 and AVX512VBMI 2026-07-20 18:15:10 -07:00
convert_from_argb.cc SVE2 row functions needed for multipass image functions 2026-08-06 12:40:26 -07:00
convert_from.cc Harden I21xToI420 against oversize heights 2026-08-08 12:11:18 -07:00
convert_jpeg.cc PlaneScale, UVScale and ARGBScale test 3x and 4x down sample. 2020-10-28 20:41:59 +00:00
convert_to_argb.cc Fix Coverity Control flow issues (DEADCODE) 2026-07-01 10:39:22 -07:00
convert_to_i420.cc Fix int negation overflow in ConvertToARGB/I420 2026-06-05 12:34:38 -07:00
convert.cc Harden I21xToI420 against oversize heights 2026-08-08 12:11:18 -07:00
cpu_id.cc add bmm detect and vdpphps in util/cpuid 2026-06-09 14:52:48 -07:00
mjpeg_decoder.cc Document why MJPEG databuf size cannot overflow 2026-08-06 12:25:21 -07:00
mjpeg_validate.cc Update to r1732 for more robust jpeg 2019-07-01 22:32:36 +00:00
planar_functions.cc SVE2 row functions needed for multipass image functions 2026-08-06 12:40:26 -07:00
rotate_any.cc Deprecate MIPS and MSA support. 2025-10-16 12:20:40 -07:00
rotate_argb.cc SVE2 row functions needed for multipass image functions 2026-08-06 12:40:26 -07:00
rotate_common.cc Remove redundant #include <stddef.h> 2026-05-28 17:10:22 -07:00
rotate_gcc.cc Use ptrdiff_t for buffer offsets 2026-04-28 18:21:42 -07:00
rotate_lsx.cc [AArch64] Use full vectors in TransposeWx{8 => 16}_NEON 2024-05-21 07:46:42 +00:00
rotate_neon64.cc Fix integer overflow in multiplications of stride 2026-05-28 14:12:37 -07:00
rotate_neon.cc Fix integer overflow in multiplications of stride 2026-05-28 14:12:37 -07:00
rotate_sme.cc [AArch64] Re-enable SME only for Linux and new versions of Clang 2024-09-23 09:29:53 +00:00
rotate_win.cc BGRAToI420 use BgraConstants for a direct conversion using AVX512BW 2026-06-08 12:21:47 -07:00
rotate.cc SVE2 row functions needed for multipass image functions 2026-08-06 12:40:26 -07:00
row_any.cc Harden I21xToI420 against oversize heights 2026-08-08 12:11:18 -07:00
row_common.cc Harden I21xToI420 against oversize heights 2026-08-08 12:11:18 -07:00
row_gcc.cc Fix debug build error on row_gcc constants 2026-08-08 12:56:08 -07:00
row_lasx.cc Change all 1 use wrappers to matrix calls 2026-07-31 17:29:30 -07:00
row_lsx.cc Change all 1 use wrappers to matrix calls 2026-07-31 17:29:30 -07:00
row_neon64.cc InterpolateRow_NEON/SVE2 and InterpolateRow_16_NEON/SVE2 use 2 registers 2026-08-08 12:59:08 -07:00
row_neon.cc Harden I21xToI420 against oversize heights 2026-08-08 12:11:18 -07:00
row_rvv.cc Harden I21xToI420 against oversize heights 2026-08-08 12:11:18 -07:00
row_sme.cc Harden I21xToI420 against oversize heights 2026-08-08 12:11:18 -07:00
row_sve.cc InterpolateRow_NEON/SVE2 and InterpolateRow_16_NEON/SVE2 use 2 registers 2026-08-08 12:59:08 -07:00
row_win.cc Make RGBToY a 1 pass avx512bw 2026-08-03 17:53:19 -07:00
scale_any.cc Deprecate MIPS and MSA support. 2025-10-16 12:20:40 -07:00
scale_argb.cc SVE2 row functions needed for multipass image functions 2026-08-06 12:40:26 -07:00
scale_common.cc Harden I21xToI420 against oversize heights 2026-08-08 12:11:18 -07:00
scale_gcc.cc BGRAToI420 use BgraConstants for a direct conversion using AVX512BW 2026-06-08 12:21:47 -07:00
scale_lsx.cc DetilePlane and unittest for NEON 2022-01-31 20:05:55 +00:00
scale_neon64.cc Apply format with no code changes 2025-02-24 23:57:01 -08:00
scale_neon.cc Apply format with no code changes 2025-02-24 23:57:01 -08:00
scale_rgb.cc Fix Coverity Control flow issues (DEADCODE) 2026-07-01 10:39:22 -07:00
scale_rvv.cc Replace RAWToY/RGB24ToY with RGBToYMatrix 2026-04-21 17:11:14 -07:00
scale_sme.cc Apply clang format 2025-01-02 13:31:20 -08:00
scale_uv.cc SVE2 row functions needed for multipass image functions 2026-08-06 12:40:26 -07:00
scale_win.cc BGRAToI420 use BgraConstants for a direct conversion using AVX512BW 2026-06-08 12:21:47 -07:00
scale.cc SVE2 row functions needed for multipass image functions 2026-08-06 12:40:26 -07:00
test.sh Optimze ABGRToI420 for AVX2 2020-06-04 18:24:45 +00:00
video_common.cc Lint cleanup after C99 change CL 2018-01-24 19:16:03 +00:00